Мне нужно обновить продажную цену программно, на переменном продукте и на всех его вариантах.
Какую мета-область мне нужно добавить?
Я пытаюсь обновить основной продукт, например:
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');
Задняя часть: деталь продукта, все в порядке
Однако бэкэнд (список продуктов) и интерфейс получают мне старую цену
Обновление: цены также кэшируются в преходящей таблице
wp_options
.Скажем, ваш идентификатор продукта
222
, у вас будет этот переходный meta_keys в таблицеwp_options
(для этого идентификатора продукта):'_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);
Кроме того, я нашел другое решение, которое работает так же:
$product_variable = new WC_Product_Variable($post_id); $product_variable->sync($post_id); wc_delete_product_transients($post_id);