子比主题热门搜索关键词异常问题修复教程-zibll教程分享社区-zibll子比主题-WordPress主题模板-zibll子比主题

子比主题热门搜索关键词异常问题修复教程

在使用子比主题的搜索功能时,如果有用户进行一次关键词为空的搜索操作,那么热门搜索关键词会错误显示 &type=post&type=user&type=plate&type=forum 等内容作为关键词,这些明显不是正常的关键词,却显示在了热门搜索中。

例如:关键词数据以 2025&type=post 的形式储存(2025是关键词,&type=post是搜索类型),但当数据库中只存在类型参数而没有实际关键词时,就会把 &type=post 直接显示为关键词。

问题原因

zib_get_search_keywords_but 函数中,判断关键词是否有效时,使用的是原始 $key 的长度检测(如 &type=post ),而不是提取实际关键词文本后的长度。

$key = &type=post 时:

zib_new_strlen('&type=post') 会返回一定的长度值(因为字符串本身长度>2
– 所以这个条目没有被过滤掉,最终显示时输出了 &type=post 本身

修复方法

打开子比主题根目录下的 inc/functions/zib-search.php 文件,找到约 842-855行 的位置(以目前最新版本8.7为参考)。

将以下代码:

//关键词
    $keywords_html = '';
    if ($args['show_keywords']) {
        $keywords     = zib_get_search_keywords();
        $keyword_link = zib_get_search_keywords_but($keywords, 'popular', $args['popular_limit']);
        if ($keyword_link) {
            //如果没有关键词,则不显示
            $admin_btn     = zib_get_search_keywords_edit_btn();
            $keywords_html = '<div class="search-keywords">
                                <p class="muted-color"><span>' . $args['keywords_title'] . '</span>' . $admin_btn . '</p>
                                <div>' . $keyword_link . '</div>
                            </div>';
        }
    }

修改为:

//关键词
    $keywords_html = '';
    if ($args['show_keywords']) {
        $keywords = zib_get_search_keywords();
        if (is_array($keywords)) {
            foreach ($keywords as $k => $v) {
                $text = zib_get_search_keywords_text($k);
                if (zib_new_strlen($text) < 2) {
                    unset($keywords[$k]);
                }
            }
        }
        $keyword_link = zib_get_search_keywords_but($keywords, 'popular', $args['popular_limit']);
        if ($keyword_link) {
            //如果没有关键词,则不显示
            $admin_btn     = zib_get_search_keywords_edit_btn();
            $keywords_html = '<div class="search-keywords">
                                <p class="muted-color"><span>' . $args['keywords_title'] . '</span>' . $admin_btn . '</p>
                                <div>' . $keyword_link . '</div>
                            </div>';
        }
    }

修复原理

在获取热门关键词后、传递给显示函数之前,先遍历所有关键词:

1. 使用 zib_get_search_keywords_text() 函数提取每个条目的实际关键词文本
2. 如果提取出的文本长度小于2(说明没有实际关键词内容),则从数组中移除该项
3. 只有包含有效关键词的条目才会进入后续的显示流程
这样修改后, &type=post&type=user 等没有实际关键词内容的条目就不会再显示在热门搜索中了。

20260427225959864-image-97

这样进行修改过后,哪怕进行关键词为空的搜索,也不会在显示异常关键词了

请登录后发表评论