WordPress.org

Make WordPress Core

Ticket #23336: 23336.3.diff

File 23336.3.diff, 1.9 KB (added by mbijon, 5 years ago)

Bases sticky post limit off site's posts_per_page option

  • wp-includes/query.php

     
    27422742
    27432743                // Put sticky posts at the top of the posts array
    27442744                $sticky_posts = get_option('sticky_posts');
    2745                 if ( $this->is_home && $page <= 1 && is_array($sticky_posts) && !empty($sticky_posts) && !$q['ignore_sticky_posts'] ) {
    2746                         $num_posts = count($this->posts);
     2745               
     2746                // Base sticky posts limit on Posts per Page setting
     2747                $posts_per_page = (int) get_option( 'posts_per_page' );
     2748                if ( empty( $posts_per_page ) || $posts_per_page < 1 )
     2749                        $posts_per_page = 20;
     2750               
     2751                if ( $this->is_home && $page <= 1 && is_array( $sticky_posts ) && ! empty( $sticky_posts ) && ! $q['ignore_sticky_posts'] ) {
     2752                       
     2753                        $sticky_posts = array_slice( $sticky_posts, 0, apply_filters( 'sticky_posts_home_query_limit', 10 * $posts_per_page ) ); // sanity limit
     2754                        $num_posts = count( $this->posts );
    27472755                        $sticky_offset = 0;
     2756                       
    27482757                        // Loop over posts and relocate stickies to the front.
    27492758                        for ( $i = 0; $i < $num_posts; $i++ ) {
    2750                                 if ( in_array($this->posts[$i]->ID, $sticky_posts) ) {
     2759                                if ( in_array( $this->posts[$i]->ID, $sticky_posts ) ) {
    27512760                                        $sticky_post = $this->posts[$i];
    27522761                                        // Remove sticky from current position
    2753                                         array_splice($this->posts, $i, 1);
     2762                                        array_splice( $this->posts, $i, 1 );
    27542763                                        // Move to front, after other stickies
    2755                                         array_splice($this->posts, $sticky_offset, 0, array($sticky_post));
     2764                                        array_splice( $this->posts, $sticky_offset, 0, array( $sticky_post ) );
    27562765                                        // Increment the sticky offset. The next sticky will be placed at this offset.
    27572766                                        $sticky_offset++;
    27582767                                        // Remove post from sticky posts array
    2759                                         $offset = array_search($sticky_post->ID, $sticky_posts);
     2768                                        $offset = array_search( $sticky_post->ID, $sticky_posts );
    27602769                                        unset( $sticky_posts[$offset] );
    27612770                                }
    27622771                        }