WooCommerce代码设置促销日期后不显示促销价问题求助
WooCommerce代码设置促销日期后促销价不显示的解决方案
你的问题出在:仅通过$product->save()保存促销日期时,WooCommerce没有触发手动保存产品时的完整逻辑——比如清除产品缓存、执行价格同步、触发核心更新钩子,导致前端无法正确读取促销状态下的价格。
以下是修改后的代码,加入了模拟手动保存的关键步骤:
function mysalesdates( $product, $sale_start, $sale_end ) { if ( ! is_a( $product, 'WC_Product' ) ) { $product = wc_get_product( $product ); } if ( ! $product ) { return false; } // 设置促销起止日期 $product->set_date_on_sale_from( $sale_start ); $product->set_date_on_sale_to( $sale_end ); // 保存产品基础数据 $product->save(); // 清除产品缓存,确保前端获取最新状态 wc_delete_product_transients( $product->get_id() ); // 触发产品更新钩子,执行WooCommerce内部价格同步逻辑 do_action( 'woocommerce_update_product', $product->get_id() ); // 处理可变产品:同步所有子变体的促销日期设置 if ( $product->is_type( 'variable' ) ) { foreach ( $product->get_children() as $variation_id ) { $variation = wc_get_product( $variation_id ); if ( $variation ) { $variation->set_date_on_sale_from( $sale_start ); $variation->set_date_on_sale_to( $sale_end ); $variation->save(); wc_delete_product_transients( $variation_id ); do_action( 'woocommerce_update_product', $variation_id ); } } } return true; } $sale_start = strtotime("01 Jul 2024"); $sale_end = strtotime("31 July 2024"); // $myproduct_id 已从其他函数获取 $product_saledates = mysalesdates($myproduct_id, $sale_start, $sale_end);
关键步骤说明
wc_delete_product_transients():删除产品的临时缓存数据,避免前端读取到旧的价格和促销状态。do_action('woocommerce_update_product', $product_id):触发WooCommerce产品更新的核心钩子,这个动作会触发系统执行价格计算、数据同步等手动保存时的默认逻辑。- 可变产品处理:如果是可变产品,必须为每个子变体单独设置促销日期,否则变体的价格不会同步更新。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

