【问题标题】:Wordpress search optimization: limit search result (not post_per_page)Wordpress 搜索优化:限制搜索结果(不是 post_per_page)
【发布时间】:2021-10-24 00:17:01
【问题描述】:

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

我正在尝试加快 wordpress 搜索速度。

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

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

我能想到的唯一方法是使用:

'no_found_rows' => true

但是我们没有分页功能。

或者也许我们可以使用单独的查询来获取结果并计算找到的帖子数量(使用限制器)?

我不明白 wordpress 怎么可能没有这个功能。甚至像亚马逊这样的大网站也会限制搜索结果。因此,如果您搜索“a”或“usb”,它将只返回前 20 页。

【问题讨论】:

    标签: wordpress


    【解决方案1】:

    试试这个代码,它在我的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多