通过 WooCommerce 管理员电子邮件通知中的“woocommerce_email_order_meta”挂钩显示产品自定义字段
Posted
技术标签:
【中文标题】通过 WooCommerce 管理员电子邮件通知中的“woocommerce_email_order_meta”挂钩显示产品自定义字段【英文标题】:Display product custom field via "woocommerce_email_order_meta" hook in WooCommerce admin email notification 【发布时间】:2021-12-01 22:36:48 【问题描述】:我的产品有一个名为 depot 的自定义字段。我只需要在管理员邮件通知中显示此字段,而不是在客户订单回顾或客户邮件通知中显示。
我使用此代码检索电子邮件通知中的自定义字段:
add_action( 'woocommerce_email_order_meta', 'add_depot', 10, 3 );
function add_depot( $order, $sent_to_admin, $plain_text )
$items = $order->get_items();
foreach ( $items as $item )
$depot = $item->get_meta('depot');
$item['name'] = 'Dépôt: ' . $depot . $item['name'];
目前,它在客户电子邮件中显示字段仅,而在管理员电子邮件中显示字段不,如我所愿。我想我需要使用 $sent_to_admin,但我不确定如何使用。
谢谢。
【问题讨论】:
【参考方案1】:woocommerce_email_order_meta
钩子有 4 个参数,通过 $email->id
您可以定位特定的电子邮件通知
所以你得到:
function action_woocommerce_email_order_meta( $order, $sent_to_admin, $plain_text, $email )
// Targetting specific email notifications
$email_ids = array( 'new_order' );
// Checks if a value exists in an array
if ( in_array( $email->id, $email_ids ) )
// Get items
$items = $order->get_items();
// Loop trough
foreach ( $items as $item )
// Get meta
$depot = $item->get_meta( 'depot' );
// NOT empty
if ( ! empty ( $depot ) )
echo '<p style="color:green;font-size:50px;">Dépôt: ' . $depot . ' - ' . $item->get_name() . '</p>';
else
echo '<p style="color:red;font-size:50px;">Data not found!</p>';
add_action( 'woocommerce_email_order_meta', 'action_woocommerce_email_order_meta', 10, 4 );
【讨论】:
我的问题是它没有出现在管理员电子邮件中,即使是我发布的简单版本或您的版本 @Malcom 我看到了以下解释。您的元数据不存在或您使用了错误的元密钥。请参阅我修改后的答案。如果这仍然没有任何区别。然后是由于其他插件和/或您使用的主题的影响。由于我的答案适用于默认的 WordPress + WooCommerce 设置 它工作正常,非常感谢。【参考方案2】:你可以实现这个钩子:
do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );
如果您看到,您在参数中获得的第二个参数是 - 发送给管理员。因此,如果这是真的,那么您可以添加您的自定义元数据。
如果有帮助,请告诉我。
【讨论】:
以上是关于通过 WooCommerce 管理员电子邮件通知中的“woocommerce_email_order_meta”挂钩显示产品自定义字段的主要内容,如果未能解决你的问题,请参考以下文章
基于 WooCommerce 电子邮件通知中销售的产品的不同收件人
在 WooCommerce 电子邮件通知的订单详细信息表中隐藏自定义费用行