Вопрос или проблема
Я хочу обновить цену вариативного продукта 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');
Объяснение кода
-
Создание продукта: Вы создаете новый пост типа
product
и задаете его статус публикации. -
Установка типа продукта: Вы устанавливаете тип продукта как
variable
. -
Добавление атрибутов: Вы добавляете атрибуты к продукту, используя
update_post_meta
. -
Создание вариаций: Для каждого варианта, который вы хотите создать, вы сначала создаете
product_variation
, затем устанавливаете атрибуты и цены для каждой вариации. -
Обновление цен: После создания всех вариаций, обновляются минимальная и максимальная цена для переменного продукта, чтобы отображать правильные данные на витрине.
Заключение
Таким образом, следуя приведенному примеру, вы сможете полностью обновить цену переменного продукта в WooCommerce программным способом. Убедитесь, что вы также правильно сохраняете все необходимые метаданные, чтобы продукт корректно отображался на сайте.