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

产品更新前如何检查元值?需恢复库存时清空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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:27:16