首页 > 解决方案 > 如何使用分页防止帖子在帖子存档中随机重复

问题描述

paginate_links()我使用Wordpress 提供的功能将分页添加到自定义帖子类型的存档中。页码和分页本身工作正常,但每当我转到另一个页面时,帖子就会随机重新出现。

例子:

第 1 页

  1. 产品一
  2. 产品 2
  3. 产品 3
  4. 产品 4
  5. 产品 5
  6. 产品 6

第2页

  1. 产品 7
  2. 产品 4(重复)
  3. 产品 8
  4. 产品 9
  5. 产品 2(重复)
  6. 产品 10

等等。不知道这是否有任何意义,但总是相同的几个帖子重新出现在列表中。即使在示例中的硬刷新页面 2 之后看起来仍然相同。

这是我使用的自定义查询,包括循环:

<?php

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

// CUSTOM QUERY ARGS
$product_args = array(
    'post_type' => 'product',
    'posts_per_page' => 9,
    'paged' => $paged,
    'orderby' => 'date',
    'tax_query' => array(
    'relation' => 'AND',
  )
);

// CATEGORY FILTER
if(isset($_GET['cat']) && $_GET['cat']) {
  $category = $_GET['cat'];
  $product_args['tax_query'][] = array('taxonomy' => 'product-category', 'terms' => $category, 'field' => 'slug', 'operator' => 'IN');
}

$product_query = new WP_Query($product_args);

// THE LOOP
if ($product_query->have_posts()) {
  while ($product_query->have_posts()): $product_query->the_post();
    get_template_part('template-parts/content', 'product');
  endwhile;
wp_reset_postdata();
} ?>

以及Wordpress Codex上记录的paginate_links()功能:

<?php
$big = 999999999; // need an unlikely integer
$total_pages = $product_query->max_num_pages;
$translated = __( 'Page', 'project' ); // Supply translatable string
$current_page = max(1, get_query_var( 'paged' ));

echo paginate_links(array(
  'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
  'format' => '/page/%#%',
  'current' => $current_page,
  'total' => $total_pages,
  'prev_text' => '<i class="far fa-angle-left"></i>',
  'next_text' => '<i class="far fa-angle-right"></i>',
  'before_page_number' => '<span class="screen-reader-text">'.$translated.' </span>'
)); ?>

我基本上是从文档中复制它,只进行必要的更改以适应我的设置。

我还将添加我functions.php为分页链接添加的重写规则,以防这可能与问题有关:

/**
 * Fix pagination on archive pages
 */
function pagination_rewrite() {
    add_rewrite_rule(get_option('category_base') . '/page/?([0-9]{1,})/?$', 'index.php?pagename=' . get_option('category_base') . '&paged=$matches[1]', 'top');
}
add_action('init', 'pagination_rewrite');

我读到自定义查询可能会弄乱分页功能,但他们在文档中有一个专门用于处理自定义查询的部分,我确保严格遵守它。我在这里做错了什么?

标签: phpwordpress

解决方案


推荐阅读