我在Wordpress分页方面遇到麻烦。我有一个自定义存档页面,显示来自特定类别的自定义帖子类型。我想使用分页,每页显示12条帖子。我的问题是分页正常,但仅可扩展到第8页。在那之后,我将看到“找不到页面”。
我正在使用主题内置功能来显示页面导航(1、2 ... 10、11)。它可以正确显示总共11页,但在第8页之后似乎不起作用。
$taxonomy = 'product_cat';
$term_id = get_queried_object()->term_id;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'product',
'paged' => $paged,
'posts_per_page' => '12',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $term_id
)
)
);
<?php $wp_query = new WP_query( $args ); ?>
<?php if( $wp_query->have_posts() ): ?>
<?php while( $wp_query->have_posts() ): ?>
<?php $wp_query->the_post(); ?>
//post content
<?php endwhile; ?>
<?php endif; ?>
<?php s7upf_paging_nav();?>
<?php wp_reset_postdata(); ?>
@edit
当我转到应该包含12页的其他类别页面时,它们可以正常工作到第9页。 如果我转到有两页的页面,则只有第一页有效。
我尝试了更新永久链接。在wordpress设置中将每页的帖子数设置为12。
当我将查询参数中的每页帖子更改为-1时,它会正确显示一页上的所有帖子。
手动设置要显示的页面编号('paged' => '11'
)时,它还会显示带有正确帖子的正确页面。
答案 0 :(得分:2)
您使用了错误的查询。在页面上,您正在创建自己的查询,而不是页面已经执行的实际查询。 这样也可以提高性能。
步骤1。检查普通查询中的内容。
在taxonomy-product_cat.php
顶部
global $wp_query;
var_dump( $wp_query->query_vars );
这大概很适合。
第2步。进行常规循环
删除所有查询内容(也许保留$args
的备份用于下一步)
示例:替换
<?php if( $wp_query->have_posts() ): ?>
与
<?php if( have_posts() ): ?>
以此类推。
第3步。编辑主查询
我们将使用钩子pre_get_posts
add_action('pre_get_posts', 'so_53315648');
function so_53315648( WP_Query $wp_query ){
// only check this on the main query
if (! $wp_query->is_main_query() ){
return;
}
// only check this on the product_cat taxonomy
if ( ! $wp_query->is_tax('product_cat')) {
return;
}
// maybe do some more checks?
$wp_query->query_vars['posts_per_page'] = 12;
// Is this really needed??
//$wp_query->query_vars['posts_type'] = 'product';
// tweak the query the way you like.
}
如您所见,$wp_query->query_vars
应该几乎是相同的$ args。但是请勿覆盖。这可能会破坏其他内容。
我当然无法测试您的特定站点。但是答案应该在pre_get_posts
挂钩内。并调整主查询,而不要执行额外的单独查询。
进行测试,同时检查步骤1的var_dump
是否已通过更改。
顶部的检查是为了防止其他页面受到影响,也许您还需要更多?
让我知道。