wordpress - Wordpress 搜索优化:限制搜索结果(不是 post_per_page)
问题描述
我已经搜索了stackoverflow。它们都不适用于我的问题。大多数答案只是关于每页的限制(每页显示多少帖子,而不是搜索多少结果)
我正在尝试加快 wordpress 搜索速度。
例如,我有 1000 万条帖子要搜索。和用户类型“a”。搜索所有这些需要很长时间,因为 wordpress 使用的是 SQL_CALC_FOUND_ROWS。
事实是,无需搜索数百万行(帖子),答案“1000+”对用户来说就足够了。所以我们需要在找到 1000 个结果后停止搜索。
我能想到的唯一方法是使用:
'no_found_rows' => true
但是我们没有分页功能。
或者,也许我们可以使用单独的查询来获取结果并计算找到的帖子数量(使用限制器)?
我不明白 wordpress 怎么没有这个功能。甚至像亚马逊这样的大网站也会限制搜索结果。因此,如果您搜索“a”或“usb”,它将只返回前 20 页。
解决方案
试试这个代码,它在我的 wordpress 上工作,有 100 万个帖子
如果您使用搜索自定义帖子类型,请更改
post_type = '发布'
到您的帖子类型名称
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;
}
推荐阅读
- amazon-web-services - 从 Step Function 错误启动 Codebuild 作业:....“未授权创建托管规则”
- android - androidx房间多个MATCH
- firebase - Flutter 上的 Uri.https 限制了我的 url 的长度
- python - 从python中的字典中提取最大值和最小值
- html - 如何为xhtml中的每个选择创建一个包含单独信息的下拉列表
- python - 烧瓶和保留连接对象
- excel - 如果我按另一列对轴进行排序,DAX Measure 不再准确计算?
- python - IBapi Python - 从 reqHistoricalData 获取最后价格作为变量?
- office365 - 使用 Office 插件插入可点击的图像或对象
- c# - 多次下载 SQL Server Reporting Service 和 C#