You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并自定义文章类型的重复器字段产品并随机排序?

解决单个产品随机排序的问题

嘿,我明白你现在的问题啦——你现在的代码是把整个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:24