我在woocommerce中有很多产品(近30,000)。 正常价格已经设置正确,现在我想将销售价格设置为具有一定百分比折扣的常规价格。 我尝试使用一些插件,但由于产品数量的原因,我总是遇到PHP内存错误。 所以我试图直接在MYSQL中解决问题。
这是我的SQL代码:
UPDATE s
SET s.meta_value = r.meta_value * 0.85,
FROM wp_postmeta s
INNER JOIN wp_postmeta r
ON s.post_id = r.post_id
WHERE s.meta_key = '_sale_price'
AND r.meta_key = '_regular_price'
但是SQL语法中存在错误。 请向我建议如何更正代码。
答案 0 :(得分:1)
我刚刚找到了答案 - 经过大量的挖掘:
UPDATE wp_postmeta AS s
LEFT JOIN wp_postmeta AS r
ON s.post_id = r.post_id
SET s.meta_value = r.meta_value * 85 / 100
WHERE s.meta_key = '_sale_price'
AND r.meta_key = '_regular_price'
数据库中的一切都还可以,但现在问题是我无法在产品页面上看到修改。只有当我在管理员中输入产品然后从那里保存时,销售价格才会在产品页面中刷新。谁知道为什么?
答案 1 :(得分:1)
Alessandro,它实际上正在运作。但是你的成功只有一半:
UPDATE wp_postmeta AS s
LEFT JOIN wp_postmeta AS r
ON s.post_id = r.post_id
SET s.meta_value = r.meta_value
WHERE s.meta_key = '_sale_price'
AND r.meta_key = '_regular_price'
UPDATE wp_postmeta AS s
LEFT JOIN wp_postmeta AS r
ON s.post_id = r.post_id
SET s.meta_value = r.meta_value
WHERE s.meta_key = '_price'
AND r.meta_key = '_sale_price'
这样你就有了销售价格和当前的#34;价格更新。 添加任何新产品时,您必须单独运行这两个脚本。 并且不要忘记使用任何缓存插件清除缓存,例如W3 Total Cache或类似内容。
p.s。:如果未来的Woocommerce版本将包含切换功能" current"价格为_sale或_regular。
答案 2 :(得分:0)
您可以通过woocommerce_get_sale_price
过滤器永久过滤销售价格。
function so_31493236_sale_price( $sale_price, $product ) {
$sale_price = $product->get_regular_price() * 0.15;
return $sale_price;
}
add_filter( 'woocommerce_get_sale_price', 'so_31493236_sale_price', 10, 2 );