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

Posted

技术标签:

【中文标题】在 WooCommerce 电子邮件通知中更改订单项元数据【英文标题】:Changing the order item meta data in WooCommerce email notifications 【发布时间】:2022-01-03 06:57:18 【问题描述】:

我需要更改/自定义 WooCommerce 电子邮件通知的特定订单商品元数据,但我找不到解决方案。

我找到了one,但它是用于从 Woocommerce 电子邮件通知中取消设置不需要的订单商品元数据。

是否可以修改上述代码以更改电子邮件的元数据?

我尝试使用$formatted_meta[$key] = 'new value';,但这并没有得到预期的结果。有什么建议吗?

add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'unset_specific_order_item_meta_data', 10, 2);
function unset_specific_order_item_meta_data($formatted_meta, $item)
    // Only on emails notifications
    if( is_admin() || is_wc_endpoint_url() )
        return $formatted_meta;

    foreach( $formatted_meta as $key => $meta )
        $formatted_meta[$key] = 'new value';
    
    return $formatted_meta;

【问题讨论】:

【参考方案1】:

如果你想通过你正在使用的当前钩子来调整这些值,你可以这样做:

function filter_woocommerce_order_item_get_formatted_meta_data( $formatted_meta, $item ) 
    // Only on emails notifications
    if ( is_admin() || is_wc_endpoint_url() )
        return $formatted_meta;

    foreach ( $formatted_meta as $key => $meta ) 
        $formatted_meta[$key]->display_key = 'new key';
        $formatted_meta[$key]->display_value = 'new value';
    
    
    return $formatted_meta;

add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'filter_woocommerce_order_item_get_formatted_meta_data', 10, 2 );

但是,要知道,woocommerce_order_item_display_meta_keywoocommerce_order_item_display_meta_value 过滤器钩子更适合使用上述钩子:

function filter_woocommerce_order_item_display_meta_key( $display_key, $meta, $item ) 
    // Only on emails notifications
    if ( is_admin() || is_wc_endpoint_url() )
        return $display_key;

    // Display key
    $display_key = 'My new key';
    
    return $display_key;

add_filter( 'woocommerce_order_item_display_meta_key', 'filter_woocommerce_order_item_display_meta_key', 10, 3 );

function filter_woocommerce_order_item_display_meta_value( $display_value, $meta, $item ) 
    // Only on emails notifications
    if ( is_admin() || is_wc_endpoint_url() )
        return $display_value;

    // Display value
    $display_value = 'My new value';
        
    return $display_value;

add_filter( 'woocommerce_order_item_display_meta_value', 'filter_woocommerce_order_item_display_meta_value', 10, 3 );

然后是通过 if 条件来确定具体涉及哪些调整的问题,因为这些目前通常通过我的回答应用

【讨论】:

以上是关于在 WooCommerce 电子邮件通知中更改订单项元数据的主要内容,如果未能解决你的问题,请参考以下文章

在 WooCommerce 电子邮件通知中将发件人名称更改为订单元数据中的值

在 Woocommerce 订单和电子邮件通知中显示产品品牌和名称

当订单中有缺货商品时,在 WooCommerce 电子邮件通知中显示消息

在Woocommerce电子邮件通知中显示自定义订单状态的付款链接

在 WooCommerce 电子邮件通知的订单详细信息表中隐藏自定义费用行

在 Woocommerce 购物车、结帐页面、订单和电子邮件通知中的产品标题上方显示品牌名称