php - 如何使用分页防止帖子在帖子存档中随机重复
问题描述
paginate_links()
我使用Wordpress 提供的功能将分页添加到自定义帖子类型的存档中。页码和分页本身工作正常,但每当我转到另一个页面时,帖子就会随机重新出现。
例子:
第 1 页
- 产品一
- 产品 2
- 产品 3
- 产品 4
- 产品 5
- 产品 6
第2页
- 产品 7
- 产品 4(重复)
- 产品 8
- 产品 9
- 产品 2(重复)
- 产品 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');
我读到自定义查询可能会弄乱分页功能,但他们在文档中有一个专门用于处理自定义查询的部分,我确保严格遵守它。我在这里做错了什么?
解决方案
推荐阅读
- python - 在机器人框架中评估引号中的表达式失败
- datatables - 在初始化时过滤数据表:过滤具有空列的行
- c# - 如何在范围服务中使用 Microsoft.Extensions.LoggingLogger
- java - Spring boot - list all the files in the classpath
- oracle - 在 denodo oracle 数据库上投射日期会给出不同的格式
- automation - How to cut webdriver.io log(query DATA part)?
- java - How to get result from DB in batches of 1k or 2k?
- javascript - How to configure SSO for chatbot deployed on website
- android - 使用 ViewPager + NestedScrollView + RecyclerView 时的触摸事件拦截
- c# - .NET Framework automation on Azure DevOps