Woocommerce как программно обновить цену переменного товара?

Вопрос или проблема

Я хочу обновить цену вариативного продукта WooCommerce с помощью кода. Здесь я написал некоторый код, он создает продукт, но не обновляет вариативную цену:

$post = array(

    'post_title'   => 'Название продукта',

    'post_content' => '',

    'post_status'  => 'опубликовано',

    'post_type'    => "product"

);

$new_post_id = wp_insert_post( $post );

wp_set_object_terms ($new_post_id,'variable','product_type');

/**

 * Добавить атрибут продукта.

 */

$attr_names = array(

    'Длина'      => array( '12', '13','14','15' )

);

$attr_data = array();

foreach ( $attr_names as $attr_name => $attr_values ) {

    $attr_sanitized_name="pa_" . sanitize_title( $attr_name );

    $attr_data += array(

        $attr_sanitized_name => array(

            'name'          => $attr_name,

            'value'         => implode( '|', $attr_values ),

            'is_visible'    => 1,

            'is_variation'  => 1,

            'is_taxonomy'   => 0,

            'position'      => 0,

        )

    );

}

$variation_id = update_post_meta( $new_post_id, '_product_attributes', $attr_data, TRUE );

update_post_meta($variation_id, '_regular_price', '100');

Я считаю, вам нужен фильтр woocommerce_variable_price_html. Но есть несколько связанных с ценой фильтров, перечисленных в официальной документации здесь:
Документация WooCommerce API: Хуки

woocommerce_variable_price_html в версии 3.0 определён в /class-wc-product-variable.php
https://docs.woocommerce.com/wc-apidocs/source-class-WC_Product_Variable.html#145

Примените его с чем-то вроде:

add_filter( 'woocommerce_variable_price_html', 'ИМЯ_ВАШЕЙ_ФУНКЦИИ', 10, 2 );

Вот некоторые дополнительные сведения о фильтрах в WordPress


Существует также фильтр woocommerce_variation_prices, применяемый на строке 221 в
class-wc-product-variable-data-store-cpt.php
https://docs.woocommerce.com/wc-apidocs/source-class-WC_Product_Variable_Data_Store_CPT.html#221

Ответ или решение

Для того чтобы программно обновить цены в переменных продуктах WooCommerce, нужно правильно установить цены для каждой вариации, а не только для атрибутов самого продукта. В вашем коде отсутствуют части, которые занимаются созданием вариаций и их цен. Давайте рассмотрим, как можно обновить цены переменных продуктов на примере кода.

Пример кода для обновления цен переменных продуктов

// Создаем новый продукт
$post = array(
    'post_title'   => 'Product Title',
    'post_content' => '',
    'post_status'  => 'publish',
    'post_type'    => 'product',
);

$new_post_id = wp_insert_post($post);

// Устанавливаем тип продукта как переменный
wp_set_object_terms($new_post_id, 'variable', 'product_type');

// Добавляем атрибуты продукта
$attr_names = array(
    'Length' => array('12', '13', '14', '15')
);

$attr_data = array();

foreach ($attr_names as $attr_name => $attr_values) {
    $attr_sanitized_name = "pa_" . sanitize_title($attr_name);

    $attr_data[$attr_sanitized_name] = array(
        'name' => $attr_name,
        'value' => implode('|', $attr_values),
        'is_visible' => 1,
        'is_variation' => 1,
        'is_taxonomy' => 0,
        'position' => 0,
    );
}

// Сохраняем атрибуты
update_post_meta($new_post_id, '_product_attributes', $attr_data);

// Создаем вариации для каждой цены
$variations = array(
    array('length' => '12', 'price' => '100'),
    array('length' => '13', 'price' => '110'),
    array('length' => '14', 'price' => '120'),
    array('length' => '15', 'price' => '130'),
);

foreach ($variations as $variation) {
    $variation_post = array(
        'post_title'  => 'Variation ' . $variation['length'],
        'post_name'   => 'variation-' . $variation['length'],
        'post_status' => 'publish',
        'post_parent' => $new_post_id,
        'post_type'   => 'product_variation',
    );

    // Создаем вариацию
    $variation_id = wp_insert_post($variation_post);

    // Устанавливаем атрибуты вариации
    update_post_meta($variation_id, 'attribute_pa_length', $variation['length']);

    // Устанавливаем цены
    update_post_meta($variation_id, '_regular_price', $variation['price']);
    update_post_meta($variation_id, '_price', $variation['price']); // Это также нужно, чтобы цена показывалась корректно
}

// Обновляем цены переменного продукта
update_post_meta($new_post_id, '_min_variation_price', '100');
update_post_meta($new_post_id, '_max_variation_price', '130');

Объяснение кода

  1. Создание продукта: Вы создаете новый пост типа product и задаете его статус публикации.

  2. Установка типа продукта: Вы устанавливаете тип продукта как variable.

  3. Добавление атрибутов: Вы добавляете атрибуты к продукту, используя update_post_meta.

  4. Создание вариаций: Для каждого варианта, который вы хотите создать, вы сначала создаете product_variation, затем устанавливаете атрибуты и цены для каждой вариации.

  5. Обновление цен: После создания всех вариаций, обновляются минимальная и максимальная цена для переменного продукта, чтобы отображать правильные данные на витрине.

Заключение

Таким образом, следуя приведенному примеру, вы сможете полностью обновить цену переменного продукта в WooCommerce программным способом. Убедитесь, что вы также правильно сохраняете все необходимые метаданные, чтобы продукт корректно отображался на сайте.

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

Капча загружается...