首页 文章

WooCommerce挂钩在电子邮件类的退款中触发电子邮件

提问于
浏览
0

默认情况下,WooCommerce不会发送退款电子邮件,因为正如Mike Jolley所说,退款是“手动流程” . 但是,我需要发一个!

我的问题是:我无法在扩展的电子邮件类中找到一个钩子来执行此操作 .

我按照本教程编写了一个扩展 WC_Email 的类,并且除了在订单状态更改并保存为"refunded"时需要一个钩子来触发类时,一切都正常工作:

http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/

我尝试了各种钩子,如 woocommerce_order_status_refund 代替39-40号线上的 woocommerce_order_status_pending_to_processing_notification 钩子 .

问题是 woocommerce_order_status_refund 不会触发电子邮件类内部 . 它在其他地方工作得很好,但不是在这种情况下 .

我尝试用 woocommerce_order_actions_end 替换钩子作为"generic" . 我添加了一个if (! $order->status == 'refunded') 来仅过滤"refunded" . 但现在每次加载状态为'refunded'的订单时,挂钩都会触发 .

(我也尝试将一个自定义动作与woocommerce_order_actions一起添加到动作菜单中,但问题是在这里我不知道如何用这个触发我的类 . 它似乎在课前加载,因此也不起作用 . )

有没有办法在订单状态更改为“退款”时触发通过扩展类发送的电子邮件?

1 回答

  • 1

    引用此question,您必须执行两项操作才能获得退款状态以触发电子邮件 .

    首先,您必须将 woocommerce_order_status_refunded 挂钩注册为将触发电子邮件的挂钩 . 默认情况下,它没有 .

    /**
     * Register the "woocommerce_order_status_refunded" hook which is necessary to
     * allow automatic email notifications when the order is changed to refunded.
     * 
     * @modified from https://stackoverflow.com/a/26413223/2078474 to remove anonymous function
     */
    add_action( 'woocommerce_init', 'so_25353766_register_email' );
    function so_25353766_register_email(){
        add_action( 'woocommerce_order_status_refunded', array( WC(), 'send_transactional_email' ), 10, 10 );
    }
    

    EDIT for WooCommerce 2.3

    在我的拉取请求中合并之后,下一版本的WooCommerce(2.3)应该支持过滤触发电子邮件的操作 . 因此,您可以通过过滤器添加退款状态:

    add_filter( 'woocommerce_init', 'so_26483961_filter_email_actions' );
    function so_26483961_filter_email_actions( $emails ){
        $emails[] = 'woocommerce_order_status_refunded';
        return $emails;
    }
    

    然后在您的自定义电子邮件类的 _construct 方法中,您可以将其用作触发器:

    add_action( 'woocommerce_order_status_refunded', array( $this, 'trigger' ) );
    

相关问题