从WP_Query for WooCommerce产品中的foreach循环中排除重复项

时间:2017-11-24 12:13:30

标签: php arrays wordpress foreach woocommerce

我有一个WP查询列出匹配的产品,如下所示:

function sku_ean_sizes () {
global $product;

$current_stijlcode = $product->get_attribute( 'pa_stijlcode' );
$current_ean = $product->get_attribute( 'pa_ean' );

$postid = get_the_ID();

    $args = array(
      'post_type' => 'product',
      'orderby' => 'meta_value_num',
        'meta_key' => '_price',
        'order' => 'asc',
      'posts_per_page' => 100,
      'tax_query' => array(
    'relation' => 'OR',
    array(
      'taxonomy' => 'pa_stijlcode',
      'field'    => 'slug',
      'terms'    => $current_stijlcode,
    ),
    array(
      'taxonomy' => 'pa_ean',
      'field'    => 'slug',
      'terms'    => $current_ean,
    )
  )
      );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
      while ( $loop->have_posts() ) : $loop->the_post();



global $product;

foreach( wc_get_product_terms( $product->id, 'pa_maat' ) as $attribute_value ){
  echo '<span>' . $attribute_value . '</span>';
}

      endwhile;
    } else {
      // no sku matches found
    }
    wp_reset_postdata();
}

我想使用foreach循环列出附加到WP查询中找到的产品的找到的产品属性:

global $product;

    foreach( wc_get_product_terms( $product->id, 'pa_maat' ) as $attribute_value ){
      echo '<span>' . $attribute_value . '</span>';
    }

此代码有效。但是,$attribute_value变量输出重复记录。这是有道理的,因为多个产品可以具有相同的输出。

我可以进行哪些调整以排除重复值?

在上下文中;这是为了显示特定产品的所有可用尺寸。

1 个答案:

答案 0 :(得分:1)

<强>更新

您应该使用foreach循环来设置数组中的所有值,避免重复

然后,使用implode() PHP函数,您将显示所有属性术语名称而不重复。

这个替换你的部分代码会一次显示所有产品的非重复属性名称:

$loop = new WP_Query( $args );
if ( $loop->have_posts() ):
    $maat_term_names = array();
    while ( $loop->have_posts() ): 
        $loop->the_post();

        // Set the attribute term names in an array avoiding duplicates
        foreach( wc_get_product_terms( $loop->post->ID, 'pa_maat' ) as $attribute_value ):
            $maat_term_names[$attribute_value] = $attribute_value;
        endforeach;
    endwhile;

    // Sorting (ordering)
    sort($maat_term_names);

    // Here you display attribute term names without duplicates (coma separated)
    echo '<span>' . implode( '</span>, <span>', $maat_term_names ) . '</span> ';

else:
   echo '<span>No SKUs matches found</span>';
endif;

wp_reset_postdata();