最合适的回答,由SO网友:Ignat B. 整理而成
考虑到@Mayeenul Islam的评论:
我刚刚用虚拟数据在一个空白主题中进行了测试,使用0(零)进行的搜索触发了一个空搜索-这意味着所有:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts WHERE 1=1 AND
wp_posts.post_type IN (\'post\', \'page\', \'attachment\') AND
(wp_posts.post_status = \'publish\') ORDER BY wp_posts.post_date DESC
LIMIT 0, 10
事实上
wp-includes/query.php
包含
if ( ! empty( $q[\'s\'] ) ) {
$search = $this->parse_search( $q );
}
,我们可以看到
!empty($q[\'s\'])
, 哪里
$q[\'s\'] == 0 (or "0")
将返回
FALSE
. 这意味着搜索查询不会
LIKE
零件,何时
$q[\'s\'] == 0
并且它返回“所有”帖子,因为没有任何东西限制带有特定条件的查询,应该在
LIKE
部分
这由以下人员确认empty()
功能文档:
以下内容视为空:
。。。
0(0为整数)“0”(0为字符串)。。。
因此,我们无法筛选/更新“0”以传递if空的条件逻辑。我的建议是,如果用户要搜索“0”,则应更新查询。
下面是一个快速修复程序,可以帮助用户搜索“0”。
add_filter("posts_where", "search_hotfix", 10, 1);
function search_hotfix($where_clause){
if(get_query_var(\'s\') == 0){
$where_clause .= " AND (((wp_posts.post_title LIKE \'%0%\') OR (wp_posts.post_content LIKE \'%0%\'))) ";
}
return $where_clause;
}
<小时>
UPDATE:
下面是一个快速修复方法,可以停止WP搜索“0”。此代码将强制WP\\U查询不提供任何结果。
add_action(\'pre_get_posts\', \'search_hotfix_reset_q\');
function search_hotfix_reset_q($query){
if ( get_query_var(\'s\') == 0) {
$query->query_vars[\'post__in\'] = array(0);
}
}