MySQL 查询以更改 WooCommerce 中的可变产品价格

kar*_*bbu 4 php mysql wordpress product woocommerce

我想更改 woocommerce 中可变产品的价格。我尝试使用下面的 MySQL 查询来做到这一点,

UPDATE wp_postmeta 
SET meta_value = price_value 
WHERE post_id = variation_id AND meta_key = '_sale_price';
Run Code Online (Sandbox Code Playgroud)

但它只在后端(数据库和管理区域)而不是在前端更新。其实在前端它也没有显示售价。由于我不擅长 SQL,是否有任何代码片段或 WooCommerce 挂钩可以让我更改可变产品的价格?

谢谢。

Rau*_*pta 11

如果你想改变产品的价格是在销售,你必须同时更新_sale_price,并_price用相同的值。

//for Regular Price
UPDATE wp_postmeta 
SET meta_value = diff_price_value 
WHERE post_id = variation_id AND meta_key = '_regular_price';

//for Price
UPDATE wp_postmeta 
SET meta_value = price_value 
WHERE post_id = variation_id AND meta_key = '_price';

//for Sale Price
UPDATE wp_postmeta 
SET meta_value = price_value 
WHERE post_id = variation_id AND meta_key = '_sale_price';
Run Code Online (Sandbox Code Playgroud)

添加 如果要将上述所有查询合并为一个查询,可以使用以下查询:

UPDATE wp_postmeta
SET meta_value = CASE
                   WHEN meta_key = "_regular_price" THEN diff_price_value
                   WHEN meta_key = "_price" THEN price_value
                   WHEN meta_key = "_sale_price" THEN price_value
                   ELSE meta_key
               END
WHERE post_id = variation_id
  AND meta_key IN ("_regular_price", "_price", "_sale_price");
Run Code Online (Sandbox Code Playgroud)

你也需要删除存储在WooCommerce产品价格缓存wp_options下表,并_transient_timeout_wc_var_prices_{{post_id}} _transient_wc_var_prices_{{post_id}}option_name

DELETE
FROM `wp_options`
WHERE (`option_name` LIKE '_transient_wc_var_prices_%'
    OR `option_name` LIKE '_transient_timeout_wc_var_prices_%')
Run Code Online (Sandbox Code Playgroud)

以上所有查询都经过测试并为我工作。

在运行这个查询之前做一个数据库备份

参考:将 WooCommerce 产品的销售价格复制到正常价格并重置销售价格

希望这可以帮助!