Make WordPress Core

Changeset 37712


Ignore:
Timestamp:
06/15/2016 12:32:25 PM (8 years ago)
Author:
boonebgorges
Message:

Query: After [37692], don't skip set_found_posts() when no posts are found.

The 'found_posts' filter must continue to run for plugins manipulating post
results via filter.

Props dd32.
Fixes #36687.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/query.php

    r37692 r37712  
    36513651        }
    36523652
    3653         // Convert to WP_Post objects and set the found-post totals.
     3653        $this->set_found_posts( $q, $limits );
     3654
     3655        // Convert to WP_Post objects.
    36543656        if ( $this->posts ) {
    36553657            $this->posts = array_map( 'get_post', $this->posts );
    3656             $this->set_found_posts( $q, $limits );
    36573658        }
    36583659
  • trunk/tests/phpunit/tests/post/query.php

    r37692 r37712  
    413413        return array( 12345 );
    414414    }
     415
     416    /**
     417     * @ticket 36687
     418     */
     419    public function test_posts_pre_query_filter_should_respect_set_found_posts() {
     420        global $wpdb;
     421
     422        $this->post_id = self::factory()->post->create();
     423
     424        // Prevent the DB query
     425        add_filter( 'posts_request', '__return_empty_string' );
     426        add_filter( 'found_posts_query', '__return_empty_string' );
     427
     428        // Add the post and found_posts
     429        add_filter( 'the_posts', array( $this, 'filter_the_posts' ) );
     430        add_filter( 'found_posts', array( $this, 'filter_found_posts' ) );
     431
     432        $q = new WP_Query( array( 'suppress_filters' => false ) );
     433
     434        remove_filter( 'posts_request', '__return_empty_string' );
     435        remove_filter( 'found_posts_query', '__return_empty_string' );
     436        remove_filter( 'the_posts', array( $this, 'filter_the_posts' ) );
     437        remove_filter( 'found_posts', array( $this, 'filter_found_posts' ) );
     438
     439        $this->assertSame( array( $this->post_id ), wp_list_pluck( $q->posts, 'ID' ) );
     440        $this->assertSame( 1, $q->found_posts );
     441    }
     442
     443    public function filter_the_posts() {
     444        return array( get_post( $this->post_id ) );
     445    }
     446
     447    public function filter_found_posts( $posts ) {
     448        return 1;
     449    }
    415450}
Note: See TracChangeset for help on using the changeset viewer.