use*_*140 1 php sql wordpress woocommerce price
我想将 WooCommerce 商店中的所有常规价格替换为促销价值,并删除下面的促销价值wp_postmeta。
该列post_id对于每种产品的两个价格都是相同的,要复制的列是_sale_priceto_price和 delete_sale_price。
我可以运行什么查询来实现此目的?
这是您正在寻找的纯 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 指出产品价格缓存
上面的查询经过测试并且对我有用。
在运行此查询之前,请先备份数据库
希望这可以帮助!