Как обновить название ярлыка таксономии атрибута продукта в WooCommerce

#php #wordpress #woocommerce #attributes #product

#php #wordpress #woocommerce #атрибуты #продукт

Вопрос:

У меня есть атрибут, который является таксономией, мне нужно обновить ярлык атрибута. Вот что я сделал на данный момент

  $args = array(
      'category' => array('chinese'),
      'orderby' => 'name',
  );
  $products = wc_get_products($args);
  foreach($products as $product)
  {
     $attribute = $product->get_attributes();
  
             foreach($attribute as $attributeItem)
      {
  
          if($attributeItem->is_taxonomy())
          {
             $attributeItem->get_taxonomy_object()->attribute_label = "new-label"; // set new label
              
          }
      } 
      $product->set_attributes($attribute);
      $product-save();
  }
  

Если я перечитываю атрибут продукта, ярлык не обновляется (считывается старая метка), мне нужно обновить ярлык атрибута и сохранить его в базе данных, чтобы при обратном чтении значение отражало недавно обновленную метку.

Чего мне не хватает?

Ответ №1:

Чтобы изменить / обновить данные таксономии атрибута продукта, вам нужно использовать wc_update_attribute() функцию, so в вашем коде, для изменения названия ярлыка атрибута продукта:

 $products  = wc_get_products( array('category' => 't-shirts',  'orderby' => 'name') );

// Loop through queried products
foreach($products as $product) {
    // Loop through product attributes
    foreach( $product->get_attributes() as $attribute ) {
        if( $attribute->is_taxonomy() ) {
            $attribute_id   = $attribute->get_id(); // Get attribute Id
            
            $attribute_data = wc_get_attribute( $attribute_id ); // Get attribute data from the attribute Id
            
            // Update the product attribute with a new taxonomy label name
            wc_update_attribute( $attribute_id, array(
                'name'         => 'New label', // <== == == Here set the taxonomy label name
                'slug'         => $attribute_data->slug,
                'type'         => $attribute_data->type,
                'order_by'     => $attribute_data->order_by,
                'has_archives' => $attribute_data->has_archives,
            ) );
        }
    }
}
  

Протестировано и работает.

Комментарии:

1. Конечно, решение протестировано и работает, как ожидалось!! Спасибо @LoicTheAztec