2017-01-09 9 views
2

Мне нужно обновить продажную цену программно, на переменном продукте и всех его вариантах.Добавить продажную цену программно к вариациям продукта

Какое мета-поле необходимо добавить?

Я пытаюсь обновить основной продукт, такие как:

update_post_meta($post_id, '_regular_price', '100'); 
update_post_meta($post_id, '_price', '50'); 
update_post_meta($post_id, '_sale_price', '50'); 

, а затем я обновляю каждые одиночные вариации

update_post_meta($variation_id, '_regular_price', '100'); 
update_post_meta($variation_id, '_price', '50'); 
update_post_meta($variation_id, '_sale_price', '50'); 
update_post_meta($variation_id, 'attribute_pa_taglia', $term_slug); 
update_post_meta($variation_id, '_stock', $stock); 
update_post_meta($variation_id, '_stock_status', 'instock'); 
update_post_meta($variation_id, '_manage_stock', 'yes'); 

Назад конец: деталь продукта, все в порядке enter image description here

Однако бэкэнд (список продуктов) и внешний интерфейс получают мне старую цену

enter image description here

ответ

2

Update: Цены также кэшируются в переходных wp_options таблице.

Пусть говорят ваш ID продукт 222, вы будете иметь, что переходные процессы meta_keys в wp_options таблице (для этого продукта ID):

'_transient_timeout_wc_product_children_22' 
'_transient_wc_product_children_22' 
'_transient_timeout_wc_var_prices_222' // <=== <=== HERE 
'_transient_wc_var_prices_222' // <=== <=== <=== HERE 

Что вы можете попытаться сделать это, чтобы обновить дату истечения meta_value устаревшей метки времени, таким образом:

// Set here your product ID 
$main_product_id = 222 
$transcient_product_meta_key = '_transient_wc_var_prices_'. $main_product_id; 
update_option($transcient_product_meta_key, strtotime("-12 hours")); 
wp_cache_delete ('alloptions', 'options'); // Refresh caches 

Таким образом, вы будете для чтобы система восстановила этот устаревший кэшированный переходный процесс.


Кроме того, вы должны попробовать, чтобы добавить/обновить свой идентификатор родительского продукта (основной продукт, где изменение устанавливаются) следующие:

// Set here your Main product ID (for example the last variation ID of your product) 
$post_id = 22; 

// Set here your variation ID (for example the last variation ID of your product) 
$variation_id = 24; 

// Here your Regular price 
$reg_price = 100; 
// Here your Sale price 
$sale_price = 50; 

update_post_meta($post_id, '_min_variation_price', $sale_price); 
update_post_meta($post_id, '_max_variation_price', $sale_price); 
update_post_meta($post_id, '_min_variation_regular_price', $reg_price); 
update_post_meta($post_id, '_max_variation_regular_price', $reg_price); 
update_post_meta($post_id, '_min_variation_sale_price', $sale_price); 
update_post_meta($post_id, '_max_variation_sale_price', $sale_price); 

update_post_meta($post_id, '_min_price_variation_id', $variation_id); 
update_post_meta($post_id, '_max_price_variation_id', $variation_id); 
update_post_meta($post_id, '_min_regular_price_variation_id', $variation_id); 
update_post_meta($post_id, '_max_regular_price_variation_id', $variation_id); 
update_post_meta($post_id, '_min_sale_price_variation_id', $variation_id); 
update_post_meta($post_id, '_max_sale_price_variation_id', $variation_id); 
+0

спасибо, но этого недостаточно. Все еще не работает. Могли бы установить параметры в таблицах woo? – mariobros

+0

Я уже пытался очистить WC Transients, но не работает. Если я снижу цену продажи программно ... продукт продолжает отображаться со скидкой (и наоборот, если я устанавливаю цену продажи ... скидка не появляется) ... кажется проблема с кешем, но я не использовал кеш-плагин! – mariobros

+0

Ницца! он отлично работает. Спасибо – mariobros

3

Кроме того, у меня найти другое решение, которое работает такие же:

$product_variable = new WC_Product_Variable($post_id); 
$product_variable->sync($post_id); 
wc_delete_product_transients($post_id); 

 Смежные вопросы

  • Нет связанных вопросов^_^