如何修复Wordpress分页(第8页后找不到页面)

时间:2018-11-15 08:57:23

标签: php wordpress pagination

我在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')时,它还会显示带有正确帖子的正确页面。

1 个答案:

答案 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是否已通过更改。 顶部的检查是为了防止其他页面受到影响,也许您还需要更多?

让我知道。