在最近的历史中,WordPress将默认搜索查询从仅标题更改为标题、摘录和帖子内容。这在小型网站上效果很好,但在有许多帖子或很长帖子内容的网站上,搜索时间可能长得令人无法接受。
那么,我们如何修改默认的WordPress搜索,将其限制为仅搜索帖子标题,而不搜索帖子摘录或内容呢?
例如,在我目前有100000篇文章的项目中,搜索需要32秒才能运行。我还使用了ACF关系字段,而typeahead搜索速度非常慢。问题似乎是的默认查询/?s
哪个搜索post_title
, post_excerpt
, 和post_content
.
我发现了许多关于扩展查询的文章和SE帖子,例如包括post\\u元字段,但没有任何关于将其限制为post\\u标题搜索的结论。
如果插件更改所有查询(包括ACF关系查询)的搜索函数,则解决方案可以是自定义函数或插件。
在股票WordPress 4.9搜索中,查询监视器按如下方式报告查询:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND (((wp_posts.post_title LIKE \'%foo%\')
OR (wp_posts.post_excerpt LIKE \'%foo%\')
OR (wp_posts.post_content LIKE \'%foo%\'))
AND ((wp_posts.post_title LIKE \'%bar%\')
OR (wp_posts.post_excerpt LIKE \'%bar%\')
OR (wp_posts.post_content LIKE \'%bar%\')))
AND wp_posts.post_type IN (\'post\', \'page\', \'attachment\')
AND (wp_posts.post_status = \'publish\'
OR wp_posts.post_author = 1
AND wp_posts.post_status = \'private\')
ORDER BY (CASE
WHEN wp_posts.post_title LIKE \'%foo bar%\'
THEN 1
WHEN wp_posts.post_title LIKE \'%foo%\'
AND wp_posts.post_title LIKE \'%bar%\'
THEN 2
WHEN wp_posts.post_title LIKE \'%foo%\'
OR wp_posts.post_title LIKE \'%bar%\'
THEN 3
WHEN wp_posts.post_excerpt LIKE \'%foo bar%\'
THEN 4
WHEN wp_posts.post_content LIKE \'%foo bar%\'
THEN 5
ELSE 6 END), wp_posts.post_date DESC
LIMIT 0, 10
我得到的最接近的答案是修改pre_get_post, 但法典没有解释如何更改搜索的字段。我还发现this solution 但这根本不起作用。编辑:越来越近。这是我需要在中修改的行wp-includes/class-wp-query.php
:
$search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like );