产品更新前如何检查元值?需恢复库存时清空ACF字段
解决方案
合适的钩子:woocommerce_before_product_object_save
这个钩子是WooCommerce 3.0+引入的,会在产品对象保存到数据库之前触发,刚好满足你“更新前检查库存”的需求,还能同时获取产品更新前和更新后的状态,方便精准判断是否是“恢复库存”的场景。
实现代码
add_action('woocommerce_before_product_object_save', 'clear_acf_on_simple_product_restock', 10, 2); function clear_acf_on_simple_product_restock($original_product, $updated_product) { // 仅处理简单产品 if (!$updated_product->is_type('simple')) { return; } // 判断是否是「从缺货转为有货」的场景 $was_out_of_stock = !$original_product->is_in_stock(); $now_in_stock = $updated_product->is_in_stock(); if ($was_out_of_stock && $now_in_stock) { // 替换成你的ACF字段键(不是显示名称,可在ACF编辑页查看) $target_acf_key = 'expected_stock_date'; // 清空ACF字段 update_field($target_acf_key, '', $updated_product->get_id()); } }
关键说明
- 钩子的两个参数:
$original_product是更新前的产品状态,$updated_product是待保存的最新状态,通过对比两者的库存状态,避免每次更新产品都触发操作 - 用
is_type('simple')过滤掉变体产品,完全符合你的需求 - 注意替换
$target_acf_key为你实际的ACF字段键(比如field_123abc或自定义的键名)
为什么不选其他钩子?
woocommerce_update_product:产品更新后触发,不符合“更新前检查”的要求save_post_product:WordPress原生钩子,需要手动处理产品新旧状态,不如WooCommerce专用钩子便捷woocommerce_product_set_stock:仅在库存数值变化时触发,无法直接判断是否是「缺货转有货」的场景
内容的提问来源于stack exchange,提问作者Demuri Celidze
相关产品推荐
相关产品推荐

