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

寻找WooCommerce产品创建时触发的钩子以实现自动邮件发送

解决WooCommerce新产品创建时专属触发钩子的问题

针对你的需求,这里提供两种可靠的解决方案:

方案1:修复woocommerce_new_product钩子的使用问题

你之前尝试的woocommerce_new_product是WooCommerce官方提供的仅在新产品创建时触发的钩子,但你的add_action参数配置有误,导致函数未被调用。

正确的使用方式如下:

// 修复钩子绑定:参数个数改为1(该钩子仅传递产品对象一个参数)
add_action( 'woocommerce_new_product', 'new_product_created', 10, 1 );

function new_product_created($product) {
    $product_id = $product->get_id(); 
    $date_created = $product->get_date_created(); 
    do_action( 'product_created',  $product, $product_id, $date_created); // 调用邮件发送逻辑
}

这个钩子在产品数据成功写入数据库后触发,能正常获取产品的所有属性(包括名称、创建日期),且仅在新产品创建时执行,不会在更新时触发。

方案2:在woocommerce_admin_process_product_object中添加新建判断

如果你仍然需要使用woocommerce_admin_process_product_object,可以通过判断产品是否为新建来避免更新时触发:

add_action( 'woocommerce_admin_process_product_object', 'new_product_created' );

function new_product_created($product) {
    // 判断是否为新建产品:创建日期等于修改日期,且产品ID是刚生成的(避免更新旧产品时误判)
    $date_created = $product->get_date_created();
    $date_modified = $product->get_date_modified();
    
    if ( $date_created && $date_modified && $date_created->getTimestamp() === $date_modified->getTimestamp() ) {
        $product_id = $product->get_id(); 
        do_action( 'product_created',  $product, $product_id, $date_created); // 调用邮件发送逻辑
    }
}

这个判断利用了新产品创建时,创建日期和修改日期完全一致的特性,确保仅在首次创建时执行代码。

为什么之前的钩子有问题?

  • woocommerce_new_product:你设置了接受2个参数,但该钩子实际只传递1个产品对象,导致函数无法被正确调用。
  • save_post_product:触发时机在产品数据还未完全同步到WooCommerce产品对象时,因此无法获取完整的产品属性。
  • woocommerce_admin_process_product_object:默认在产品创建和更新时都会触发,必须添加额外判断区分场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:41:17