[wp-trac] [WordPress Trac] #49550: is_home is set to true even for cron jobs, which causes sticky posts to get prepended to all WP_Query results

WordPress Trac noreply at wordpress.org
Fri Feb 28 21:10:32 UTC 2020


#49550: is_home is set to true even for cron jobs, which causes sticky posts to get
prepended to all WP_Query results
--------------------------+-----------------------------
 Reporter:  archon810     |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  General       |    Version:  5.3.2
 Severity:  normal        |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 Hi,

 We just ran into a bug where sticky posts were prepended to the list of
 posts being processed by a WP cron job in a new `WP_Query` like this:

 {{{
 $query = new WP_Query([
         'post_status' => 'future',
         'date_query' => array(
             'before' => '- 1 minute'
         ),
         'numberposts' => -1
     ]);
 }}}

 To my surprise, once someone stickied a post, our function in the cron job
 started doing stuff to the stickied posts, even though it simply runs in
 WP cron and we're not on the homepage.

 I then looked at the logic that determines if the sticky posts get
 prepended.

 {{{
 // Put sticky posts at the top of the posts array
 $sticky_posts = get_option( 'sticky_posts' );
 if ( $this->is_home && $page <= 1 && is_array( $sticky_posts ) && ! empty(
 $sticky_posts ) && ! $q['ignore_sticky_posts'] ) {
 }}}

 So this can only fire when `is_home` is true. But how can it be? We're
 running via WP cron.

 Looking at that logic:

 {{{
 if ( ! ( $this->is_singular || $this->is_archive || $this->is_search ||
 $this->is_feed || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ||
 $this->is_trackback || $this->is_404 || $this->is_admin ||
 $this->is_robots ) ) {
     $this->is_home = true;
 }
 }}}

 Since none of these are set - we're in WP cron - `is_home` gets set to
 true. That doesn't seem right. Is this a sneaky bug or am I missing
 something? Shouldn't it also check if it's running in cron here and not
 set `is_home` if so?

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/49550>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list