在使用子比主题的搜索功能时,如果有用户进行一次关键词为空的搜索操作,那么热门搜索关键词会错误显示 &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 等没有实际关键词内容的条目就不会再显示在热门搜索中了。

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



![表情[se]-WordPress主题模板-zibll子比主题](https://www.zibll.com/wp-content/themes/zibll/img/smilies/se.gif)
![表情[aixin]-WordPress主题模板-zibll子比主题](https://www.zibll.com/wp-content/themes/zibll/img/smilies/aixin.gif)



