【问题标题】:How to get woocommerce attributes used for product variations?如何获取用于产品变体的 woocommerce 属性?
【发布时间】:2021-09-27 16:26:07
【问题描述】:

我正在尝试获取包含所有 woocommerce 属性和值的列表,但仅包含用于产品变体的那些(例如,我想获取“尺寸”和“颜色”值,而不是仅用于信息的其他属性诸如“织物”或“重量”之类的目的)。

我正在使用此代码:

$allAttributes = wc_get_attribute_taxonomies();
foreach ($allAttributes as $att) {
  $wcAttribute = wc_get_attribute($att->attribute_id);
  [...]
}

此时,我想检查此 $wcAttribute 是否用于任何产品变体,是否将其添加到我的列表中,但我不知道如何继续。

有什么帮助吗?

【问题讨论】:

    标签: wordpress woocommerce attributes


    【解决方案1】:

    我回应自己,因为我找到了解决方案。可能,这不是最好的解决方案,但它确实有效(如果有人有更好的解决方案,我将不胜感激):

      function getAllWCAttributes()
      {
        /* Format for attributes: ['attribute_id' => ['id', 'name', 'values'=>['id', 'name'] ] ]*/
        $attributes = array();
        $allAttributes = wc_get_attribute_taxonomies();
        foreach ($allAttributes as $att) {
          if (isAttributeUsedForVariations($att)) {
            $wcAttTerms = get_terms('pa_' . $att->attribute_name);
            $terms = array();
            foreach ($wcAttTerms as $wcTerm) {
              $terms[] = array(
                'id' => $wcTerm->term_id,
                'name' => $wcTerm->name
              );
            }
            $attributes[$att->attribute_id] = array(
              'id' => $att->attribute_id,
              'name' => $att->attribute_label,
              'values' => $terms
            );
          }
        }
        return $attributes;
      }
      
      function isAttributeUsedForVariations($attribute)
      {
        $terms = array();
        $attTerms =  get_terms('pa_' . $attribute->attribute_name);
        foreach ($attTerms as $attTerm) {
          $terms[] = $attTerm->slug;
        }
        $args = array(
          'post_type' => 'product_variation',
          'post_status' => 'publish',
          'meta_query' => array(
            array(
              'key' => 'attribute_pa_' . $attribute->attribute_name,
              'value' => $terms,
              'compare'  =>  'IN'
            )
          )
        );
        $variationsQuery = new WP_Query($args);
        return ($variationsQuery->post_count > 0)? true: false;
      }
    

    文档:

    wc_get_attribute_taxonomies()

    get_terms()

    WP_Query

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-30
      • 2019-03-08
      • 2019-04-04
      • 2019-01-23
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多