我已经搜索了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;
}