【问题标题】:WooCommerce: Skip attribute in foreach if anotner attribute is part of the loopWooCommerce:如果另一个属性是循环的一部分,则跳过 foreach 中的属性
【发布时间】:2021-01-15 23:15:25
【问题描述】:

我在我的产品页面上显示属性(颜色)列表。

该列表包含许多类似的属性,例如“蓝色”、“浅蓝色”、“海洋”等等。 为了使属性/颜色列表保持简短,如果“蓝色”是循环的一部分,我想删除每个版本的蓝色。

这是我的循环代码:

<?php
global $product;
$pa_colors = wc_get_product_terms( $product->get_id(), 'pa_colors', array( 'fields' =>  'all', 'orderby' => 'menu_order' ) );
if( $pa_colors ) :
?>
    <ul>
        <?php foreach ( $pa_colors as $pa_color ) : ?>
        <li>
            <?php echo $pa_color->name; ?>
        </li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>

我知道,如果里面有颜色“蓝色”,我可以检查循环:

$color_blue = $product->get_attribute('pa_colors');

// Check if blue is in the attribute array:
if( strpos($color_blue, 'blue') !== false ) :

// Versions of blue to remove
$color_blue_versions = array('light blue', 'marine')

但是我如何从 foreach 循环中跳过 $color_blue_versions 中的所有其他蓝色版本?

【问题讨论】:

  • 如果blue存在,为什么不输出blueif( strpos( $color_blue, 'blue' ) === false ): echo 'blue'; ?
  • 因为我会丢失循环中的所有其他属性,例如红色或绿色。对不起,只是一个例子
  • 蓝、绿、红总是先输出吗?你有当前输出的例子吗?
  • 不幸的是,它总是不同的。您可以考虑电视的功能。如果它具有 4k 输出,我不需要 1080p 功能,它也具有过滤功能,但不是亮点。

标签: php wordpress loops woocommerce attributes


【解决方案1】:

您可能正在寻找array_diff()

计算数组的差异。

这是一个最小的例子。

<?php
$colors = [ 'blue', 'light-blue', 'sea-blue', 'murmaid-blue', 'green', 'yellow', 'red', ];
$exclude = [ 'light-blue', 'sea-blue', 'murmaid-blue', ];
$colors = array_diff( $colors, $exclude );
print_r( $colors ); ?>

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2015-02-11
    • 1970-01-01
    • 2016-07-13
    相关资源
    最近更新 更多