寻找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
相关产品推荐
相关产品推荐

