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

标签 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(); ?>

@编辑

当我进入一个应该有 12 页的不同类别页面时,它们可以正常工作到第 9 页。 如果我转到有 2 页的页面,则只有第一页有效。

我尝试更新永久链接。在 WordPress 设置中将每页帖子数设置为 12。

当我将查询参数中每页的帖子更改为 -1 时,它会正确显示一页上的所有帖子。

手动设置要显示的页码('paged' => '11')时,它还会显示包含正确帖子的正确页面。

最佳答案

您使用了错误的查询。在页面上,您正在创建自己的查询,而不是页面已经执行的实际查询。 这对于性能也会更好。

第 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 步:编辑主查询

我们将使用钩子(Hook)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 Hook 内。并调整主查询,而不是进行额外的单独查询。

测试,同时检查步骤 1 的 var_dump 是否已完成您的更改。 顶部的检查是为了阻止其他页面受到影响,也许您需要更多?

请告诉我。

关于php - 如何修复Wordpress分页(第8页后找不到页面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53315648/

相关文章:

php - 弹出数组的第一个元素而不是最后一个(反转 array_pop)?

javascript - 如何通过隐藏输入元素将 PHP 字符串变量传递给 Javascript 函数

html - 如何在我的网站上居中对齐此表单

php - Wordpress 中的导航栏不显示 : Block

javascript - 表单中自动保存按钮之前的 2 秒间隔

php - 飞行响应中的 Access-Control-Allow-Headers 不允许请求 header 字段 Content-Type

php - WordPress Sage 9 - 获取 dist url?

php - Yii2自定义分页 View

java - 在 Pageable 中传递到 Spring Controller 的排序将方向附加到属性名称,导致 SQL 错误

php - Laravel 5.1 指定当前页面进行分页