WordPress.org

Make WordPress Core

Ticket #9978: 9978.diff

File 9978.diff, 2.4 KB (added by wonderboymusic, 2 years ago)
  • wp-includes/query.php

    diff --git wp-includes/query.php wp-includes/query.php
    index 04286aa..284bea3 100644
    class WP_Query { 
    27452745                } 
    27462746 
    27472747                // Put sticky posts at the top of the posts array 
    2748                 $sticky_posts = get_option('sticky_posts'); 
    2749                 if ( $this->is_home && $page <= 1 && is_array($sticky_posts) && !empty($sticky_posts) && !$q['ignore_sticky_posts'] ) { 
    2750                         $num_posts = count($this->posts); 
    2751                         $sticky_offset = 0; 
    2752                         // Loop over posts and relocate stickies to the front. 
    2753                         for ( $i = 0; $i < $num_posts; $i++ ) { 
    2754                                 if ( in_array($this->posts[$i]->ID, $sticky_posts) ) { 
    2755                                         $sticky_post = $this->posts[$i]; 
     2748                $sticky_posts = get_option( 'sticky_posts' ); 
     2749                if ( $this->is_home && $page <= 1 
     2750                        && is_array( $sticky_posts ) && ! empty( $sticky_posts ) 
     2751                        && ! $q['ignore_sticky_posts'] ) { 
     2752 
     2753                        // Loop over posts and remove stickies. 
     2754                        foreach ( $this->posts as $i => $post ) { 
     2755                                if ( in_array( $post->ID, $sticky_posts ) ) { 
    27562756                                        // Remove sticky from current position 
    2757                                         array_splice($this->posts, $i, 1); 
    2758                                         // Move to front, after other stickies 
    2759                                         array_splice($this->posts, $sticky_offset, 0, array($sticky_post)); 
    2760                                         // Increment the sticky offset. The next sticky will be placed at this offset. 
    2761                                         $sticky_offset++; 
    2762                                         // Remove post from sticky posts array 
    2763                                         $offset = array_search($sticky_post->ID, $sticky_posts); 
    2764                                         unset( $sticky_posts[$offset] ); 
     2757                                        array_splice( $this->posts, $i, 1 ); 
    27652758                                } 
    27662759                        } 
    27672760 
    27682761                        // If any posts have been excluded specifically, Ignore those that are sticky. 
    2769                         if ( !empty($sticky_posts) && !empty($q['post__not_in']) ) 
    2770                                 $sticky_posts = array_diff($sticky_posts, $q['post__not_in']); 
     2762                        if ( ! empty( $q['post__not_in'] ) ) 
     2763                                $sticky_posts = array_diff( $sticky_posts, $q['post__not_in'] ); 
    27712764 
    27722765                        // Fetch sticky posts that weren't in the query results 
    2773                         if ( !empty($sticky_posts) ) { 
     2766                        if ( ! empty( $sticky_posts ) ) { 
    27742767                                $stickies = get_posts( array( 
    27752768                                        'post__in' => $sticky_posts, 
    27762769                                        'post_type' => $post_type, 
    27772770                                        'post_status' => 'publish', 
     2771                                        'order' => $q['order'], 
     2772                                        'orderby' => $q['orderby'], 
    27782773                                        'nopaging' => true 
    27792774                                ) ); 
    27802775 
    2781                                 foreach ( $stickies as $sticky_post ) { 
    2782                                         array_splice( $this->posts, $sticky_offset, 0, array( $sticky_post ) ); 
    2783                                         $sticky_offset++; 
    2784                                 } 
     2776                                foreach ( $stickies as $i => $sticky_post ) 
     2777                                        array_splice( $this->posts, $i, 0, array( $sticky_post ) ); 
    27852778                        } 
    27862779                } 
    27872780