【发布时间】:2021-10-04 12:21:09
【问题描述】:
我有一个函数可以根据外部来源返回的 id 获取帖子。我使用post_pre_query 过滤器来覆盖wordpress 的默认功能。这会正确返回所需的结果,但分页是一场灾难。在post_pre_queryhttps://developer.wordpress.org/reference/hooks/posts_pre_query/ 的文档中,它说应该设置found_posts 和max_num_pages 以使分页工作,但这并不能解决问题。不幸的是,post_pre_query 的示例代码相对不存在,这使得这很难。我尝试设置其他几个值,例如posts_per_page、paged 和is_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,但我认为这不适用于此,因为它不在搜索模板文件中。
【问题讨论】: