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 );
}
/**
* Filter the search SQL that is used in the WHERE clause of WP_Query.
*
* @since 3.0.0
*
* @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 ) );
if ( ! $q['suppress_filters'] ) {
/**
* Filter the search SQL that is used in the WHERE clause of WP_Query.
*
* @since 3.0.0
*
* @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 ) );
}
// Taxonomies
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'] ) )
$search_orderby = $this->parse_search_order( $q );
/**
* Filter the ORDER BY used when ordering search results.
*
* @since 3.7.0
*
* @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 );
if ( ! $q['suppress_filters'] ) {
/**
* Filter the ORDER BY used when ordering search results.
*
* @since 3.7.0
*
* @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 );
}
if ( $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 );
}
/**
* @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 */';
}
}