我正在尝试从Woocommerce BACS网关中删除“我们的银行信息”和付款说明,而不是页面和电子邮件。
我知道应该通过删除woocommerce_thankyou_bacs和woocommerce_email_before_order_table动作来完成。
我设法从thankyou页面删除了该消息,但它仍然出现在电子邮件中。我查了一下,woocommerce_thankyou_bacs和woocommerce_email_before_order_table都从wp_filter global中删除了。
我依赖于我从这里复制的一个函数:http://wpquestions.com/question/showChrono/id/9204由于由于不同的唯一id而具有类似的remove_action无法工作的问题,并且它的工作方式是从wp_filter全局消失了。
我已经尝试了各种优先级,0-20,感谢页面消息已经消失,但电子邮件仍显示付款说明。
我的代码如下:
add_action( 'woocommerce_thankyou_bacs', function() {
if( function_exists( 'wc_gateway_remove_hook' ) ) {
//Remove BACS payment instructions from thankyou page <- WORKS!
wc_gateway_remove_hook( 'WC_Gateway_BACS', 'woocommerce_thankyou_bacs', 'thankyou_page' );
//Remove BACS payment instructions from email <- DOESN'T WORK!
wc_gateway_remove_hook( 'WC_Gateway_BACS', 'woocommerce_email_before_order_table', 'email_instructions' );
}
}, 10 );
function wc_gateway_remove_hook( $classname, $hook, $callback ) {
foreach( (array) $GLOBALS['woocommerce']->payment_gateways->payment_gateways as $key => $gateway_obj ) {
if( $classname === get_class( $gateway_obj ) ) {
remove_action( $hook, array( $gateway_obj, $callback ) );
}
}
}
答案 0 :(得分:-2)
试试这个:
add_action( 'woocommerce_email_before_order_table', function() {
if( function_exists( 'wc_gateway_remove_hook' ) ) {
wc_gateway_remove_hook( 'WC_Gateway_BACS', 'woocommerce_email_before_order_table', 'email_instructions' );
}
}, 10);
function wc_gateway_remove_hook( $classname, $hook, $callback ) {
foreach( (array) $GLOBALS['woocommerce']->payment_gateways->payment_gateways as $key => $gateway_obj ) {
if( $classname === get_class( $gateway_obj ) ) {
remove_action( $hook, array( $gateway_obj, $callback ) );
}
}
}