我需要在 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 挂钩,我是否必须尝试创建一个新挂钩?如果我创建一个新邮件,它是否会列在电子邮件编辑器中,以便我可以加入?
您可以尝试两种不同的方法,从代码中替换这一行:
remove_action('woocommerce_email_order_meta', 'woocommerce_email_order_meta', 10, 4);
add_filter('woocommerce_email_order_meta_fields', '__return_empty_array', 9000, 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;
}