在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);
}
20
是add_action
Woo的优先级,我也理解remove_action()
必须具有与原始add_action()
相同的优先级。
无论我尝试什么,结算和送货地址仍会显示在电子邮件通知中。
一旦开始工作,它就会很棒!但是,还有一个额外的要求:这只需要在我对Woo中woocommerce_order_status_pending_to_processing_notification
挂钩的代码中发生。
换句话说,当订单状态从Pending变为Processing时,我还有其他代码可以触发并生成电子邮件(我已经尝试了上面的代码以及该钩子中的所有变体)。我需要将结算和送货地址仅显示在生成的自定义电子邮件中。
有什么想法吗?非常感谢。 :)
答案 0 :(得分:1)
以下是代码:
add_action( 'woocommerce_email', function ( $email_class ) {
remove_action( 'woocommerce_email_customer_details', array( $email_class, 'email_addresses' ), 20, 3 );
});