Wordpress搜索优化:限制搜索结果(不是post_per_page)



我已经搜索了stackoverflow。它们都不适用于我的问题。大多数答案只是关于限制每页(每页显示多少篇文章,而不是搜索多少个结果)

我想加快wordpress的搜索速度。

例如,我有1000万条帖子要搜索。以及用户类型。因为wordpress使用的是SQL_CALC_FOUND_ROWS,所以搜索所有这些需要很长时间。

事实是,没有必要搜索数百万行(帖子)和答案"1000+"对用户来说就足够了。所以我们需要在找到1000个结果后停止搜索。

我能想到的唯一方法是:

'no_found_rows' => true

但是我们没有分页功能。

或者我们可以使用单独的查询来获取结果并计算找到了多少篇文章(带有限制符)?

我不明白为什么wordpress没有这个功能。即使像亚马逊这样的大网站也会限制搜索结果。所以如果你搜索&;a&;或者"usb",它将只返回前20页。

试试这段代码,它在我的wordpress上有1M个帖子

如果您使用搜索自定义帖子类型,请更改

post_type = 'post'

到您的帖子类型名称

add_filter('pre_get_posts', 'fix_search_pagination_with_nfr', 1000);
function fix_search_pagination_with_nfr() {
global $wp_query, $wpdb;

if ( ! is_admin() && $wp_query->is_main_query() && $wp_query->is_search() ) {

$wp_query->query_vars['no_found_rows'] = 1;

$wp_query->found_posts = $wpdb->get_var( "SELECT COUNT(*) FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')" );
$wp_query->found_posts = apply_filters_ref_array( 'found_posts', array( $wp_query->found_posts, &$wp_query ) );


if($wp_query->query_vars['posts_per_page'] > 0) {        
$wp_query->max_num_pages = ceil($wp_query->found_posts / $wp_query->query_vars['posts_per_page']);
} else {
$wp_query->max_num_pages = 0;
}


}

return $wp_query;
}

最新更新