搜索“0”将返回结果

时间:2015-09-15 作者:Rutwick Gangurde

我有一个CPT,它附带了一个自定义分类法。我最近注意到如果我搜索0 (零),在后端和前端,它都会给出结果。这些最终职位都没有0 标题和内容中的任何位置。无论如何,我没有修改循环,它只是简单的搜索模板。这让我想知道两件事:

默认情况下,WP搜索什么0?

Update:

根据以下评论,我正在更新我的要求:

Is there a way to search for the posts which contain 0 in either the title or the content, when 0 is entered as the search key?

1 个回复
最合适的回答,由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);
    }
}

相关推荐

Search function not working

我正在为我的woocommerce商店使用SSHOP主题。当我从主页搜索任何内容时,搜索url工作正常,下面的搜索permalink显示。https://techcart.pk/?s=abc但当我从产品页面或分类页面搜索时,搜索结果并没有找到任何内容,下面的permalink显示。https://techcart.pk/product/8mm-led-10pcs/?s=abc我想重写上面的永久链接,如下所示https://techcart.pk/?s=abc请帮忙