You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress搜索慢问题求助:仅标题搜索过滤代码及优化方案

解决WordPress大站点搜索慢的方案

一、限制搜索范围为仅标题的代码实现

不要直接修改wp-includes/class-wp-query.php核心文件(WordPress更新会覆盖修改),使用pre_get_posts钩子实现全局搜索范围限制,同时覆盖前台、后台文章搜索及图库(附件)搜索场景:

function restrict_search_to_title_only( $query ) {
    // 仅处理搜索请求,排除管理员后台非搜索类内部查询
    if ( $query->is_search && ! is_admin() || ( is_admin() && isset( $_GET['s'] ) && ( isset( $_GET['post_type'] ) && ( $_GET['post_type'] === 'post' || $_GET['post_type'] === 'attachment' ) ) ) ) {
        // 重置搜索字段为仅标题
        $query->set( 'search_columns', array( 'post_title' ) );
    }
    return $query;
}
add_action( 'pre_get_posts', 'restrict_search_to_title_only' );

将上述代码添加到当前主题的functions.php文件,或自定义插件中。

代码说明:

  • 同时覆盖前台公开搜索、后台文章列表搜索、后台图库(attachment类型)搜索三个场景;
  • 通过search_columns参数指定仅检索post_title字段,替代默认的多字段检索逻辑;
  • 避开管理员后台的非搜索类内部查询,避免干扰其他功能正常运行。

二、额外优化方案(进一步降低查询耗时)

1. 给post_title字段添加数据库索引

登录MariaDB管理工具(如phpMyAdmin),执行以下SQL语句给wp_posts表的post_title字段添加全文索引:

ALTER TABLE wp_posts ADD FULLTEXT INDEX ft_post_title (post_title);

(注意:将wp_posts替换为你的实际数据库表前缀)

2. 启用MariaDB查询缓存

在MariaDB配置文件(如my.cnf/my.ini)中添加以下配置:

query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M

修改后重启MariaDB服务生效。

3. 缓存搜索结果页面

安装并配置缓存插件(如WP Rocket、W3 Total Cache),将搜索结果页面加入缓存规则,重复搜索请求直接返回缓存内容,避免重复查询数据库。

4. 替换为专业搜索插件

如果仅限制标题仍无法满足性能需求,可使用专门的搜索插件(如ElasticPress、Relevanssi),这类插件基于优化的查询逻辑或全文搜索引擎,能大幅提升大站点的搜索速度。


内容的提问来源于stack exchange,提问作者Ali Kiani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:42:39