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

自定义订单状态:已注册邮件操作但邮件未发送问题排查

问题诊断与修复方案

核心问题:类内钩子注册位置错误

你代码的关键问题是在WC_Ready_For_Pickup_Email类中,直接将add_action语句写在了类的方法外部,这属于PHP语法错误,导致这些钩子根本没被正确注册,自然不会触发trigger和taf方法,也就看不到error_log的输出。

修复步骤

将两个add_action调用移动到类的__construct方法内部,放在parent::__construct();之后:

修改后的class-wc-ready-for-pickup-email.php核心代码:

class WC_Ready_For_Pickup_Email extends WC_Email {
    public function __construct() {
        $this->id             = 'wc_ready_for_pickup';
        $this->customer_email = true;
        $this->title          = __( 'Ready for Pick-up', 'lockoloop-customizer' );
        $this->description    = __( 'Ready for Pick-up emails are sent to customers when their orders are marked ready for pick-up.', 'lockoloop-customizer' );
        $this->template_base  = LCLPC_ADMIN_TEMPLATES_DIR;
        $this->template_html  = 'emails/customer-ready-for-pickup.php';
        $this->template_plain = 'emails/plain/customer-ready-for-pickup.php';
        $this->recipient = '{customer_email}';
        $this->placeholders   = array(
            '{order_date}'   => '',
            '{order_number}' => '',
        );

        parent::__construct();

        // 将钩子注册移到构造函数内
        add_action( 'woocommerce_order_status_ready', array( $this, 'trigger' ), 10, 2 );
        add_action( 'woocommerce_order_status_changed', array( $this, 'taf' ), 10, 3 ); // 注意:该钩子实际传递3个参数
    }

    public function taf( $order_id, $old_status, $new_status ) {
        error_log('Taf triggered. Order ID: ' . $order_id . ', Old Status: ' . $old_status . ', New Status: ' . $new_status);
    }

    // 其余方法保持不变...
}

额外注意事项

  1. 钩子参数数量修正:woocommerce_order_status_changed钩子实际传递3个参数($order_id, $old_status, $new_status),之前写的10, 2会导致参数接收不全,需修正为10, 3并更新taf方法的参数列表,方便调试。
  2. 邮件启用状态检查:确保WooCommerce后台「邮件设置」中,已启用「Ready for Pick-up」邮件模板。
  3. 增强调试日志:可在trigger方法开头添加更详细的日志,比如:
public function trigger( $order_id, $order = false ) {
    error_log('Trigger called for order ID: ' . $order_id);
    // 其余代码...
}
  1. 状态钩子格式确认:你注册的状态是wc-ready,对应的WooCommerce状态切换钩子woocommerce_order_status_ready格式正确,无需修改。

验证修复

修改代码后刷新后台,将任意订单状态改为「Ready for pick-up」,查看服务器error_log文件,应该能看到Yo和Taf相关日志输出,同时邮件会正常发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:38:09