wordpress - 如何循环浏览 wordpress 帖子并在最后一页上使用没有重复的 posts_per_page?
问题描述
在 wordpress 中,我正在创建一个自定义循环/查询,通过它我传递某些参数。当我点击页面时,最后一页复制了一些帖子/产品以满足 posts_per_page 变量,但是我想指定我不想要任何重复。有没有标准的方法来做到这一点?这似乎是一个非常明显的观点。
<?php
$args = array( 'post_type' => 'product', 'posts_per_page' => 5, 'product_cat' => 'products', 'orderby' => 'rand' );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
<li class="product">
<a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
<?php woocommerce_show_product_sale_flash( $post, $product ); ?>
<?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="300px" height="300px" />'; ?>
<h3><?php the_title(); ?></h3>
<span class="price"><?php echo $product->get_price_html(); ?></span>
</a>
<?php woocommerce_template_loop_add_to_cart( $loop->post, $product ); ?>
</li>
<?php endwhile; ?>
<?php previous_posts_link('« Previous', $loop ->max_num_pages);
next_posts_link(' Next »', $loop ->max_num_pages); ?>
<?php wp_reset_query();?>
解决方案
这似乎是一个非常明显的观点。
如果您在'orderby' => 'rand'
查询中使用,则不会,顺便说一句,这在大型表上也非常昂贵。
如果您想确保在接下来的查询中排除已经显示的项目,您需要保存已经显示的 post_ids 并将它们传递给post__not_in
参数,请参阅codex 页面搜索post__not_in
。
你可以做这样的事情来帮助你理解这个想法:
...
// don't forget to initialize the session somewhere
$already_displayed_post_ids = [];
if ( ! isset( $_SESSION['already_displayed_post_ids'] ) {
$_SESSION['already_displayed_post_ids'] = $already_displayed_post_ids;
} else {
$already_displayed_post_ids = array_merge( $already_displayed_post_ids, $_SESSION['already_displayed_post_ids'] );
}
$args = [
'post_type' => 'product',
'posts_per_page' => 5,
'product_cat' => 'products',
'orderby' => 'rand',
'post__not_in' => $already_displayed_post_ids
];
$loop = new WP_Query( $args );
...
推荐阅读
- sql - 列被多次指定
- r - Selectinput 和 Action 按钮没有按预期工作,只有一个在闪亮的地块
- c - 为什么 x 打印字符串的大小?
- angular - *ngFor 在自定义模板中未定义,在 ul > li 中定义/工作
- javascript - 如何在烧瓶应用程序的选择框中对 onchange 事件运行 ajax 请求
- linux - 将具有依赖关系的 Perl 脚本从一台计算机移动到另一台计算机
- maven - 部署相同版本的 Jar
- clojure - Clojure 中的简单二维数组
- asp.net-core-mvc - 洋葱架构:服务应该在核心还是基础架构中?为什么?
- hashicorp-vault - 为什么创建令牌会导致“父令牌查找失败”