如何合并自定义文章类型的重复器字段产品并随机排序?
解决单个产品随机排序的问题
嘿,我明白你现在的问题啦——你现在的代码是把整个Boutique的产品组打乱,但你想要的是所有单个产品混在一起随机排序对吧?
问题出在你现在是先打乱Boutique的顺序,然后逐个输出每个Boutique下的所有产品,所以结果就是整组产品块被打乱,而不是单个产品。我们需要先把所有产品都收集到一个统一数组里,再打乱这个数组,最后循环输出就行啦!
下面是修改后的完整代码:
// 初始化空数组,用来存放所有产品的数据 $all_products = array(); // 获取所有Boutique的ID $boutiques = get_posts(array( 'fields' => 'ids', 'posts_per_page' => -1, 'post_type' => 'boutique' )); // 遍历每个Boutique,收集里面的产品 foreach ( $boutiques as $boutique_id ) { // 先获取当前Boutique的URL(和你原代码里的$boutique_url保持一致,这里假设是通过get_field获取) $boutique_url = get_field('boutique_url', $boutique_id); if( have_rows('boutique_products', $boutique_id) ): while ( have_rows('boutique_products', $boutique_id) ): the_row(); // 把当前产品的信息存到数组里 $all_products[] = array( 'url' => $boutique_url, 'img' => get_sub_field('product_img') ); endwhile; endif; } // 打乱所有产品的顺序 shuffle($all_products); // 循环输出打乱后的产品 foreach ( $all_products as $product ) { // 对URL和图片地址做安全过滤 $safe_url = esc_url($product['url']); $safe_img = esc_url($product['img']); ?> <div class="boutique_product"> <a href="<?php echo $safe_url; ?>"> <img src="<?php echo $safe_img; ?>" alt="产品图片"> </a> </div> <?php }
关键点说明:
- 我们首先创建了
$all_products数组,用来统一存储每个产品的URL和图片地址,把所有Boutique下的产品都归到一个集合里。 - 遍历每个Boutique时,先获取该Boutique的跳转URL(和你原代码逻辑保持一致就行),然后把每个产品的信息添加到数组中。
- 收集完所有产品后,再用
shuffle()打乱整个产品数组,这样每个产品都是独立随机排序的。 - 最后循环打乱后的数组输出HTML,同时用
esc_url()做安全过滤,避免潜在的XSS风险。
这样修改后,你就能得到像[1,4,2,3,5,6]这样单个产品随机排列的效果啦!
内容的提问来源于stack exchange,提问作者Gab Comtois
相关产品推荐
相关产品推荐

