WordPress 自带的搜索功能基于 LIKE 语句匹配文章标题和内容,在中小型网站够用,但当网站内容增加到几百篇以上时,默认搜索的准确性和速度都会明显下降。更重要的是,默认搜索只能搜文章和页面,不能搜索自定义文章类型、自定义字段、评论或附件内容。如果你希望提供一个真正好用的搜索体验,就需要对搜索功能进行深度定制。

提升搜索的第一步是扩展搜索范围。默认的 pre_get_posts 钩子可以修改搜索查询的参数,让搜索覆盖更多内容类型。以下代码可以让搜索同时包含文章标题、内容、摘要、自定义字段以及自定义文章类型:

add_action('pre_get_posts', 'extend_search_query');
function extend_search_query($query) {
    if ($query->is_search() && !is_admin()) {
        $query->set('post_type', array('post', 'page', 'product', 'case_study'));
        $query->set('meta_query', array(
            array(
                'key' => '_custom_search_field',
                'value' => $query->get('s'),
                'compare' => 'LIKE'
            )
        ));
        $query->set('s', $query->get('s'));
    }
}

但这种方法本质上是把多个条件的匹配结果合并,性能并不理想。对于更高级的需求,你应该考虑使用全文搜索引擎替代 MySQL 的 LIKE 查询。

Elasticsearch 是目前最流行的全文检索引擎,配合 ElasticPress 插件可以无缝集成到 WordPress 中。安装 ElasticPress 后,它会自动把所有文章索引到 Elasticsearch 服务器,搜索时直接查询 Elasticsearch 而不是 MySQL。这种方式不仅搜索速度快,还支持模糊匹配、同义词、相关度排序、权重调节等高级功能。对于内容量在几千篇以上的网站,换成 Elasticsearch 后的搜索体验提升是非常明显的。

如果你没有独立的 Elasticsearch 服务器,另一个选择是使用 Algolia 或 SearchWP 这类托管式搜索服务。它们同样提供了高效的搜索响应,并且配置简单,不需要维护服务器。

搜索结果的排序也是影响用户体验的重要因素。默认搜索按相关性排序,但你可以通过 posts_orderby 过滤器修改排序规则。例如,让最新的文章排在前面,或者让带有特色图片的文章获得更高的权重:

add_filter('posts_orderby', 'custom_search_orderby', 10, 2);
function custom_search_orderby($orderby, $query) {
    if ($query->is_search() && !is_admin()) {
        return 'post_date DESC';
    }
    return $orderby;
}

搜索页面的前端交互同样值得优化。一个常见的做法是实现 AJAX 实时搜索建议,当用户输入关键词时,下拉列表会实时显示匹配的结果。实现方式有多种:你可以自己写 JavaScript 调用 REST API,也可以用 Algolia 的 InstantSearch 组件,或者使用一些现成的插件如 SearchWP Live Ajax Search。实时搜索建议不仅能缩短用户查找路径,还能减少无效搜索提交的比例。

在搜索结果页面中展示分类筛选和自定义过滤条件也是一个重要的用户功能。你可以通过 URL 参数传递筛选条件,在 pre_get_posts 中动态修改查询。例如,允许用户选择只搜索某个分类下的文章:

if (!empty($_GET['category_id']) && $query->is_search()) {
    $query->set('cat', intval($_GET['category_id']));
}

对于 WooCommerce 商店,搜索功能的优化更为重要。用户希望按价格区间、品牌、评分、库存状态等条件筛选商品。WooCommerce 自带的搜索已经支持部分筛选,但更复杂的筛选通常需要借助插件或者使用 Elasticsearch 的方案。

搜索词的统计和分析也值得重视。了解用户最常搜索哪些词、哪些词搜不到结果,可以帮助你调整内容策略。使用 Google Search Console 或者第三方搜索插件提供的统计分析功能,定期查看搜索数据,优化内容以覆盖用户的需求。

一个容易被忽略的问题是搜索的空白结果页。当用户输入的关键词没有任何匹配时,不要仅仅显示“没有找到内容”几个字。更好的做法是推荐热门文章、显示最近更新的内容、或者提供修改搜索建议的提示。这些微小的用户体验改进,能让访客在找不到想要内容时依然能留在你的网站上浏览其他内容。