通过 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 电子邮件通知的订单详细信息表中隐藏自定义费用行

在Woocommerce管理员,订单和电子邮件中显示自定义付款字段

在 WooCommerce 电子邮件通知中更改订单项元数据

如何防止在 WooCommerce 电子邮件通知中运行挂钩

从 WooCommerce 中的电子邮件通知中删除 BACS 指令