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

3
我需要更改/自定义WooCommerce电子邮件通知的特定订单项目元数据,但找不到解决方案。
我找到了一个,但它是用于从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个回答

4

如果您想通过当前使用的挂钩(hook)调整这些值,可以按照以下方式进行:

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条件确定具体需要进行哪些调整,因为这些调整当前通常是通过我的回答进行应用的。


对我有用。如果想要修改一个键,可以使用类似于 if ( $meta->key === 'Booking Date' ) { $display_value = date( 'm.d.Y', strtotime( $meta->value ) ); } 的东西。 - Omar Shishani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接