Query: Respect 'suppress_filters' when filtering search-related SQL.

Props 5um17.
Fixes #35594.

git-svn-id: https://develop.svn.wordpress.org/trunk@36404 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Boone Gorges 2016-01-26 03:11:12 +00:00
parent 14b6dbebd2
commit 746f545f9a
2 changed files with 43 additions and 18 deletions

View File

@ -2790,15 +2790,17 @@ class WP_Query {
$search = $this->parse_search( $q ); $search = $this->parse_search( $q );
} }
/** if ( ! $q['suppress_filters'] ) {
* Filter the search SQL that is used in the WHERE clause of WP_Query. /**
* * Filter the search SQL that is used in the WHERE clause of WP_Query.
* @since 3.0.0 *
* * @since 3.0.0
* @param string $search Search SQL for WHERE clause. *
* @param WP_Query $this The current WP_Query object. * @param string $search Search SQL for WHERE clause.
*/ * @param WP_Query $this The current WP_Query object.
$search = apply_filters_ref_array( 'posts_search', array( $search, &$this ) ); */
$search = apply_filters_ref_array( 'posts_search', array( $search, &$this ) );
}
// Taxonomies // Taxonomies
if ( !$this->is_singular ) { if ( !$this->is_singular ) {
@ -3007,15 +3009,18 @@ class WP_Query {
if ( ! empty( $q['search_orderby_title'] ) && ( empty( $q['orderby'] ) && ! $this->is_feed ) || ( isset( $q['orderby'] ) && 'relevance' === $q['orderby'] ) ) if ( ! empty( $q['search_orderby_title'] ) && ( empty( $q['orderby'] ) && ! $this->is_feed ) || ( isset( $q['orderby'] ) && 'relevance' === $q['orderby'] ) )
$search_orderby = $this->parse_search_order( $q ); $search_orderby = $this->parse_search_order( $q );
/** if ( ! $q['suppress_filters'] ) {
* Filter the ORDER BY used when ordering search results. /**
* * Filter the ORDER BY used when ordering search results.
* @since 3.7.0 *
* * @since 3.7.0
* @param string $search_orderby The ORDER BY clause. *
* @param WP_Query $this The current WP_Query instance. * @param string $search_orderby The ORDER BY clause.
*/ * @param WP_Query $this The current WP_Query instance.
$search_orderby = apply_filters( 'posts_search_orderby', $search_orderby, $this ); */
$search_orderby = apply_filters( 'posts_search_orderby', $search_orderby, $this );
}
if ( $search_orderby ) if ( $search_orderby )
$orderby = $orderby ? $search_orderby . ', ' . $orderby : $search_orderby; $orderby = $orderby ? $search_orderby . ', ' . $orderby : $search_orderby;
} }

View File

@ -159,4 +159,24 @@ class Tests_Query_Search extends WP_UnitTestCase {
$this->assertEqualSets( array( $p2 ), $q->posts ); $this->assertEqualSets( array( $p2 ), $q->posts );
} }
/**
* @ticket 35594
*/
public function test_search_should_respect_suppress_filters() {
add_filter( 'posts_search', array( $this, 'filter_posts_search' ) );
add_filter( 'posts_search_orderby', array( $this, 'filter_posts_search' ) );
$q = new WP_Query( array(
's' => 'foo',
'suppress_filters' => true,
) );
remove_filter( 'posts_search', array( $this, 'filter_posts_search' ) );
remove_filter( 'posts_search_orderby', array( $this, 'filter_posts_search' ) );
$this->assertNotContains( 'posts_search', $q->request );
}
public function filter_posts_search( $sql ) {
return $sql . ' /* posts_search */';
}
} }