Программное обновление значения настраиваемого атрибута, установленного в продукте WooCommerce

Если у меня уже есть существующие атрибуты продукта, а затем я использую указанную ниже функцию, он удаляет существующие атрибуты из продукта и заменяет их этим атрибутом.

Я хочу только программно обновить это одно значение атрибута новым значением.

Нужно ли мне сначала прочитать существующий массив атрибутов с помощью get_post_meta и обновить его? Я просто пытаюсь узнать, есть ли альтернативный метод.

function update_internalSKU() {
  $product_id = 850;
  $product_attributes = array();
  $product_attributes['internalSKU'] = array(
      'name' => 'internalSKU',
      'value' => 'b8de7569042',
      'position' => 1,
      'is_visible' => 0,
      'is_variation' => 0,
      'is_taxonomy' => 0
  );
  update_post_meta( $product_id ,'_product_attributes', $product_attributes);
}
update_internalSKU();

См. также:  Cypress - Ошибка: не удается найти модуль '../../webpack.config.js'
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. simlpymarkb

    Ваш "internalSKU" кажется настраиваемым атрибутом продукта. Итак, да, вам нужно сначала получить массив атрибутов продукта (поскольку для вашего продукта могут быть установлены другие атрибуты продукта), чтобы обновить только необходимые value следующим образом:

    // Define the function
    function update_internalSKU( $product_id ) {
        // Get product attributes
        $product_attributes = get_post_meta( $product_id ,'_product_attributes', true);
    
        // Loop through product attributes
        foreach( $product_attributes as $attribute => $attribute_data ) {
            // Target specif attribute  by its name
            if( 'internalSKU' === $attribute_data['name'] ) {
                // Set the new value in the array
                $product_attributes[$attribute]['value'] ='b8de7569042'; 
                break; // stop the loop
            }
        }
        // Set updated attributes back in database
        update_post_meta( $product_id ,'_product_attributes', $product_attributes );
    }
    

    Код находится в файле functions.php активной дочерней темы (или активной темы).

    Теперь вы можете запускать эту функцию где угодно, определяя ее $product_id аргумент (для идентификатора продукта 850), например:

    // Run the function for specific product Id
    update_internalSKU( 850 );
    

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

    Спасибо @LoicTheAztec! Ваше здоровье!! person simlpymarkb; 12.01.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: