将 WooCommerce 产品促销价复制为正常价格并重置促销价

use*_*140 1 php sql wordpress woocommerce price

我想将 WooCommerce 商店中的所有常规价格替换为促销价值,并删除下面的促销价值wp_postmeta

该列post_id对于每种产品的两个价格都是相同的,要复制的列是_sale_priceto_price和 delete_sale_price

我可以运行什么查询来实现此目的?

Rau*_*pta 5

这是您正在寻找的纯 MySQL 查询:

首先,您必须使用自连接来更新_price_regular_price字段

UPDATE `wp_postmeta` AS a,
       `wp_postmeta` AS b
SET a.`meta_value` = b.meta_value
WHERE a.post_id = b.post_id
  AND a.meta_key IN ('_price', '_regular_price')
  AND b.meta_key = '_sale_price'
  AND b.meta_value != ''
  AND a.`post_id` IN
    (SELECT `ID`
     FROM `wp_posts`
     WHERE `post_type` = 'product'
       AND `post_status` = 'publish');
Run Code Online (Sandbox Code Playgroud)

现在要重置销售价格和日期,您必须将其设置为空白

UPDATE `wp_postmeta`
SET `meta_value` = ''
WHERE `meta_key` IN ('_sale_price', '_sale_price_dates_from', '_sale_price_dates_to')
  AND `post_id` IN
    (SELECT `ID`
     FROM `wp_posts`
     WHERE `post_type` = 'product'
       AND `post_status` = 'publish' );
Run Code Online (Sandbox Code Playgroud)

如果你想删除这个字段,那么使用带有 WHERE 子句的 DELETE 语句,它就能解决你的目的。

此外,您还必须删除存储在wp_options下面中的表中的 WooCommerce 产品价格缓存_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)

特别感谢 @LoicTheAztec 指出产品价格缓存

上面的查询经过测试并且对我有用。

在运行此查询之前,请先备份数据库

希望这可以帮助!

  • 工作完美,谢谢你,也感谢@LoicTheAztec。 (2认同)