You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce中通过代码设置商品的常规价与促销价

在WooCommerce中修改商品常规价格与促销价格

直接通过update_post_meta修改元数据容易出现数据不一致的问题,尤其是促销价格的设置,涉及到多个关联元键和产品状态。更推荐使用WooCommerce官方提供的产品对象API来操作,能自动处理元键创建、状态同步等逻辑。

推荐实现方式(使用WC_Product对象)

// 获取产品对象
$product = wc_get_product( $product_id );
if ( ! $product ) {
    return; // 产品不存在则终止
}

// 设置常规价格
$product->set_regular_price( 500 );

// 设置促销价格(如果不需要促销可省略或设为0)
$product->set_sale_price( 300 );

// 启用促销状态(设置促销价后必须开启,否则促销价不生效)
$product->set_on_sale( true );

// 保存产品变更
$product->save();

为什么不推荐直接操作post_meta?

WooCommerce的产品价格体系涉及多个关联元数据:

  • _regular_price:存储商品的常规定价
  • _sale_price:存储商品的促销定价
  • _price:存储当前显示的实际价格(有促销时为促销价,无促销时为常规价)
  • _on_sale:标记商品是否处于促销状态

直接用update_post_meta修改单个元键,可能导致这些数据不同步,比如设置了_sale_price但没开启_on_sale,前端不会显示促销价;或者只改了_price但没更新_regular_price,导致后台价格显示异常。

若坚持手动修改元数据(不推荐)

如果一定要直接操作元数据,需要同步修改所有关联项:

// 更新常规价格
update_post_meta( $product_id, '_regular_price', 500 );

// 设置促销价格(自动创建元键,无需担心不存在)
update_post_meta( $product_id, '_sale_price', 300 );

// 启用促销状态
update_post_meta( $product_id, '_on_sale', 'yes' );

// 更新当前显示价格为促销价
update_post_meta( $product_id, '_price', 300 );

注:你提到的_sale元键应该是笔误,WooCommerce中存储促销价格的元键是_sale_price,手动修改时直接用这个键即可,不存在的话update_post_meta会自动创建。

内容的提问来源于stack exchange,提问作者Bagbaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:40:07