更改WHERE
子句中有一个名为posts_search
允许筛选SQLWHERE
用于搜索期间查询的子句(当WP_Query::is_search()
返回true和WP_Query->s
已设置):
add_filter( \'posts_search\', \'wpse134392PostsSearchSQL\', 20, 2 );
function wpse134392PostsSearchSQL( $sql, $wp_query )
{
// Alter SQL clause here
return $where;
}
自定义ORDERBY
拦截
ORDERBY
语句(例如,按作者排序,以便搜索的作者首先/最后获得其帖子),您可以使用
posts_search_orderby
:
add_filter( \'posts_search_orderby\', \'wpse134392PostsSearchOrderbySQL\', 20, 2 );
function wpse134392PostsSearchOrderbySQL( $orderby, $wp_query )
{
if ( is_admin() )
return $GLOBALS[\'wpdb\']->posts."post_date";
return $orderby;
}
细粒度SQL
posts_clauses
或
pre_get_posts
通过检查回调函数内部返回更精细的结果,如果
is_admin()
和
$query->is_search()
是
TRUE
.
不要搜索所有内容要排除没有帮助的常用术语,可以使用WP_Query::get_search_stopwords()
- 或者更好:对过滤器进行回调。目前停止词有:
about,an,are,as,at,be,by,com,for,from,how,in,is,it,of,on,or,that,the,this,to,was,what,when,where,who,will,with,www
过滤器回调示例:
add_action( \'wp_search_stopwords\', \'wpse134392SearchStopwords\' );
function wpse134392SearchStopwords( $stopwords )
{
return $stopwords + array(
\'my\',
\'your\',
\'easy\',
);
}
提示:看起来有什么东西(可能是插件)已经在拦截你的回调,因为里面有一些不应该被搜索的词。