如何从 woocommerce_email_order_meta 挂钩中删除挂钩函数

问题描述 投票:0回答:1

我需要在 WooCommerce 网站的电子邮件中包含自定义数据,即交货日期和时间。

我尝试使用此代码覆盖现有的钩子“woocommerce_email_order_meta”,我暂时将其写入functions.php,然后在其工作时移动到插件文件。

remove_action('woocommerce_email_order_meta', 'woocommerce_email_order_meta', 10, 4);

add_action('woocommerce_email_order_meta', 'custom_email_order_meta', 10, 4);

function custom_email_order_meta($order, $sent_to_admin, $plain_text, $email) {
    echo "Custom Text: This is my custom text.\n";
}

当我测试电子邮件时,会打印自定义文本行。不过,WC Hook 的原始内容也印在下面。 有没有办法完全覆盖 WC 挂钩,我是否必须尝试创建一个新挂钩?如果我创建一个新邮件,它是否会列在电子邮件编辑器中,以便我可以加入?

php wordpress woocommerce hook-woocommerce email-notifications
1个回答
0
投票

您可以尝试两种不同的方法,从代码中替换这一行:

remove_action('woocommerce_email_order_meta', 'woocommerce_email_order_meta', 10, 4);
  1. 有了这个(最好的方法)
add_filter('woocommerce_email_order_meta_fields', '__return_empty_array', 9000, 1);
  1. 或者使用这个(代码尝试的可行替代方案)
remove_action( 'woocommerce_email_order_meta', array( WC()->mailer, 'order_meta' ), 10, 3 );

两者都应该有效。


补充:

woocommerce_email_order_meta_fields
过滤器挂钩还可以允许使用自定义挂钩函数过滤要显示的元数据,如以下示例所示:

add_filter('woocommerce_email_order_meta_fields', 'filter_email_order_meta_fields', 9000, 3);
function filter_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    foreach ( $fields as $key => $field ) {
        if ( $field['label'] === __('Some label', 'woocommerce') ) {
            unset($fields[$key]); // Remove specific meta data
        }
    }

    return $fields;
}
© www.soinside.com 2019 - 2024. All rights reserved.