【问题标题】:Woocommerce set sale price to regular price - 15% discountWoocommerce 将销售价格设置为正常价格 - 15% 折扣
【发布时间】:2015-07-18 16:30:51
【问题描述】:

我在 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 语法有错误。 请向我建议如何更正代码。

【问题讨论】:

    标签: mysql wordpress woocommerce


    【解决方案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'
    

    在 DB 中一切正常,但现在的问题是我在产品页面上看不到修改。只有当我在管理员中输入产品然后从那里保存时,产品页面才会刷新销售价格。有人知道为什么吗?

    【讨论】:

      【解决方案2】:

      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'
      

      这样您就可以更新销售价格和“当前”价格。 添加任何新产品时,您必须分别运行这两个脚本。 并且不要忘记使用任何缓存插件(例如 W3 Total Cache 或类似插件)清除缓存

      p.s.:如果未来的 Woocommerce 版本将包含将“当前”价格切换为 _sale 或 _regular 的功能,那就太好了。

      【讨论】:

      • 仅供参考,要扭转这一点(删除所有折扣)使用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 = '_regular_price';然后DELETE FROM wp_postmeta WHERE meta_key = '_sale_price';
      【解决方案3】:

      您可以通过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 );
      

      【讨论】:

      • 感谢您的回答。我认为我需要在数据库中设置值,因为将来我会将其中一些值更改为其他值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2018-12-06
      相关资源
      最近更新 更多