一种方法是通过wp_query_search_exclusion_prefix
WP 4.7+中支持的过滤器。参见票证#38099.
下面是一个示例,我们可以从-
例如。!
:
add_filter( \'wp_query_search_exclusion_prefix\', function( $prefix )
{
return \'!\'; // adjust to your needs (default is -)
} );
我们将使用的位置
!apple
而不是
-apple
排除
apple
从搜索结果中。然后你可以搜索
-
.
看起来排除前缀必须是单个字符(或为空以禁用此功能),因为check in the core:
// If there is an $exclusion_prefix, terms prefixed with it should be excluded.
$exclude = $exclusion_prefix && ( $exclusion_prefix === substr( $term, 0, 1 ) );
if ( $exclude ) {
$like_op = \'NOT LIKE\';
$andor_op = \'AND\';
$term = substr( $term, 1 );
} else {
$like_op = \'LIKE\';
$andor_op = \'OR\';
}
否则听起来像是
bug, 无法仅搜索术语排除前缀。
我想知道是否最好再加一个$exclusion_prefix !== $term
检查以支持:
$exclude = $exclusion_prefix
&& $exclusion_prefix !== $term
&& ( $exclusion_prefix === mb_substr( $term, 0, 1 ) );
if ( $exclude ) {
$like_op = \'NOT LIKE\';
$andor_op = \'AND\';
$term = mb_substr( $term, 1 );
} else {
$like_op = \'LIKE\';
$andor_op = \'OR\';
}
我们还将使用
mb_substr()
而不是
substr()
为排除前缀提供更广泛的字符支持。
我想我应该为这个创建一张罚单。。。