从'woocommerce_email_customer_details'钩子中删除'email_addresses'操作

时间:2016-09-16 03:52:35

标签: php wordpress woocommerce

在WooCommerce中,有一个公共静态类WC_Emails,在/woocommerce/includes/class-wc-emails.php中定义。

在该类中,有一个名为woocommerce_email_customer_details的钩子的引用。在该钩子上,分配了一个名为email_addresses的动作,它只是一个PHP文件,它生成一些HTML用于计费和发送地址以添加到电子邮件通知中。

add_action( 'woocommerce_email_customer_details', array( $this, 'email_addresses' ), 20, 3 );

我正在尝试删除该操作,似乎无法弄清楚如何操作。

以下是我的子主题functions.php中不起作用的示例代码:

add_action( 'init', 'remove_default_addresses');
    function remove_default_addresses() {
    remove_action( 'woocommerce_email_customer_details', 
                   array( 'WC_Emails', 'email_addresses' ), 20);
}

我尝试init而不是那里的wp-head钩子。由于WC_Emails是一个静态函数,上面的代码就是WordPress Codex建议的方式,只要使用上面的array(),而不仅仅是动作名称。无论如何,这也不起作用(只有动作名称):

add_action( 'init', 'remove_default_addresses');
function remove_default_addresses() {
    remove_action( 'woocommerce_email_customer_details', 'email_addresses', 20);
}

20add_action Woo的优先级,我也理解remove_action()必须具有与原始add_action()相同的优先级。

无论我尝试什么,结算和送货地址仍会显示在电子邮件通知中。

一旦开始工作,它就会很棒!但是,还有一个额外的要求:这只需要在我对Woo中woocommerce_order_status_pending_to_processing_notification挂钩的代码中发生。

换句话说,当订单状态从Pending变为Processing时,我还有其他代码可以触发并生成电子邮件(我已经尝试了上面的代码以及该钩子中的所有变体)。我需要将结算和送货地址仅显示在生成的自定义电子邮件中。

有什么想法吗?非常感谢。 :)

1 个答案:

答案 0 :(得分:1)

以下是代码:

add_action( 'woocommerce_email', function ( $email_class ) {
    remove_action( 'woocommerce_email_customer_details', array( $email_class, 'email_addresses' ), 20, 3 );
});

Source