diff --git a/wp-includes/class-wp-query.php b/wp-includes/class-wp-query.php index 226170ee7d..9e7883f6c5 100644 --- a/wp-includes/class-wp-query.php +++ b/wp-includes/class-wp-query.php @@ -721,7 +721,9 @@ class WP_Query { * @type array $post_name__in An array of post slugs that results must match. * @type string $s Search keyword(s). Prepending a term with a hyphen will * exclude posts matching that term. Eg, 'pillow -sofa' will - * return posts containing 'pillow' but not 'sofa'. + * return posts containing 'pillow' but not 'sofa'. This feature + * can be disabled using the + * 'wp_query_use_hyphen_for_exclusion' filter. * @type int $second Second of the minute. Default empty. Accepts numbers 0-60. * @type bool $sentence Whether to search by phrase. Default false. * @type bool $suppress_filters Whether to suppress filters. Default false. @@ -1318,10 +1320,20 @@ class WP_Query { $n = ! empty( $q['exact'] ) ? '' : '%'; $searchand = ''; $q['search_orderby_title'] = array(); + + /** + * Filters whether search terms preceded by hyphens should excluded from results. + * + * @since 4.7.0 + * + * @param bool Whether the query should exclude terms preceded with a hyphen. + */ + $hyphen_exclusion = apply_filters( 'wp_query_use_hyphen_for_exclusion', true ); + foreach ( $q['search_terms'] as $term ) { // Terms prefixed with '-' should be excluded. $include = '-' !== substr( $term, 0, 1 ); - if ( $include ) { + if ( $include || ! $hyphen_exclusion ) { $like_op = 'LIKE'; $andor_op = 'OR'; } else { diff --git a/wp-includes/version.php b/wp-includes/version.php index fed73bd9e5..29211f2795 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.7-alpha-38791'; +$wp_version = '4.7-alpha-38792'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.