【问题标题】:Paginating results from posts_pre_query - Wordpress来自posts_pre_query的分页结果 - Wordpress
【发布时间】:2021-10-04 12:21:09
【问题描述】:

我有一个函数可以根据外部来源返回的 id 获取帖子。我使用post_pre_query 过滤器来覆盖wordpress 的默认功能。这会正确返回所需的结果,但分页是一场灾难。在post_pre_queryhttps://developer.wordpress.org/reference/hooks/posts_pre_query/ 的文档中,它说应该设置found_postsmax_num_pages 以使分页工作,但这并不能解决问题。不幸的是,post_pre_query 的示例代码相对不存在,这使得这很难。我尝试设置其他几个值,例如posts_per_pagepagedis_paged,但这些根本不会改变功能。事实上,它们完全被忽略了。

目前,最大页数是正确的,但每个页面上显示的结果相同,并且它们没有被限制为 posts_per_page 值。

这是我当前状态下的过滤器功能:

function default_search_override( $posts, &$query ) {
    if (!is_admin() && $query->is_main_query() && $query->is_search) {
        $skus= get_exterior_skus($_GET['year'], $_GET['make'], $_GET['model'], $_GET['filter']);
        
        if(empty($skus)) return $posts;
        
        $posts = get_post_ids_from_skus($skus);
        //var_dump($posts);
        
        $posts_per_page = 6; //$query->query_vars['posts_per_page'];
        $paged = get_query_var('paged') ? get_query_var('paged') : 1;
        echo sizeof($posts) . " / " . $posts_per_page . ".....";
        $query->max_num_pages = floor(sizeof($posts) / $posts_per_page);
        $query->posts_per_page = $posts_per_page;
        $query->found_posts = sizeof($posts);
        $query->paged = $paged;
        $query->is_paged = true;
        print_r($query);
        echo "_______";
        print_r($query->query_vars);
    }
    return $posts;
}
add_filter( 'posts_pre_query', 'default_search_override', 10, 2);

我对 wordpress 比较陌生,对分页更是如此,所以也许这是一个我只是缺少的简单修复。

我研究了一些关于分页的事情,例如使用 paginate_links,但我认为这不适用于此,因为它不在搜索模板文件中。

【问题讨论】:

    标签: wordpress search filter


    【解决方案1】:

    我设法找到了适合我的解决方案,但可能并不适合所有人。我从中获取 ID 的特定端点具有页面和限制参数。因此,我可以简单地使用 limit 将结果限制为我的 posts_per_page 值。然后,我可以将找到的帖子设置为该计数,并将max_num_pages 设置为没有页面或限制的结果计数,我的特定端点返回,这很方便。

    如果有人对纯粹从 WordPress 进行分页有答案,我仍然很想听听,因为我对此仍然不知所措。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 2011-12-28
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多