如何调整代码实现修改WooCommerce邮件通知中的订单项meta数据
适配修改说明
你用到的woocommerce_order_item_get_formatted_meta_data过滤器完全可以适配为修改订单项meta的用途,你之前的写法没有得到预期结果的核心原因是:
$formatted_meta数组的每个元素都是stdClass对象,包含key、value、display_key、display_value四个属性,你直接将整个对象替换为字符串,无法被邮件模板正常识别渲染。
正确实现代码
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'modify_specific_order_item_meta_for_emails', 10, 2); function modify_specific_order_item_meta_for_emails($formatted_meta, $item){ // 仅在邮件通知场景生效,后台和我的账户页面不改动 if( is_admin() || is_wc_endpoint_url() ) return $formatted_meta; foreach( $formatted_meta as $key => $meta ){ // 场景1:修改指定meta的内容,替换your_meta_key为你要修改的实际meta键 if( $meta->key === 'your_meta_key' ){ // 修改meta显示值 $meta->display_value = '自定义的新值'; // 如需修改meta显示的标签,可额外修改display_key属性 // $meta->display_key = '自定义标签'; } // 场景2:如果要批量修改所有meta,去掉下面的注释即可 // $meta->display_value = '统一的新值'; } return $formatted_meta; }
注意事项
- WooCommerce邮件模板渲染订单项meta时默认读取
display_key和display_value属性,无需改动原始的key和value属性即可实现自定义效果 - 若需要移除不需要的meta,直接
unset($formatted_meta[$key])即可,和你找到的原有代码逻辑一致
内容的提问来源于stack exchange,提问作者Iurie
相关产品推荐
相关产品推荐

