Problem:
当前代码段的问题在于,无论当前查询对象是什么,您都只是在检查全局主查询对象。
Workaround:
请注意
posts_where
筛选器回调,是当前查询对象。
使用该选项确定是否是前端的主搜索查询:
add_filter( \'posts_where\', function ( $where, \\WP_Query $q )
{
if( ! is_admin() && $q->is_main_query() && $q->is_search()) // No global $wp_query here
{
// ... your modifications
}
return $where;
}, 10, 2 ); // Note the priority 10 and number of input arguments is 2
还有
posts_search
如果您需要修改WHERE搜索部分,请对其进行筛选。
但一般来说,我会说,只有在您确实必须并且没有其他选择的情况下,才可以手动修改生成的SQL。