如何在WooCommerce中移除客户订单邮件中的特定元数据?
WooCommerce客户订单邮件:只留文件名,去掉文件预览和链接
核心思路
要区分管理员和客户的邮件,仅在客户收到的订单通知里修改内容——把带预览图和服务器链接的富内容替换成纯文件名。用WooCommerce的woocommerce_order_item_display_meta_value钩子直接控制元数据的显示值,比你原来用的woocommerce_order_item_meta_start更精准高效。
直接可用的代码
// 客户邮件里只显示上传文件名,移除预览图和链接 add_filter( 'woocommerce_order_item_display_meta_value', 'keep_only_filename_in_customer_email', 10, 3 ); function keep_only_filename_in_customer_email( $value, $meta, $item ) { // 仅处理邮件场景,订单前台页面保持原样 if ( is_wc_endpoint_url() ) return $value; // 获取当前发送的邮件对象 $mailer = WC()->mailer()->get_emails(); if ( empty( $mailer ) ) return $value; foreach ( $mailer as $email ) { // 匹配所有客户类型的订单邮件(比如处理中、完成状态的订单邮件) if ( str_starts_with( $email->id, 'customer_' ) ) { // 判断当前元值是否包含预览图或链接的HTML代码 if ( str_contains( $value, '<img' ) || str_contains( $value, '<a' ) ) { // 从HTML中提取文件名(适配常见插件的输出格式,可按需调整正则规则) preg_match( '/>([^<]+)</', $value, $matches ); if ( isset( $matches[1] ) ) { $value = $matches[1]; } } } } return $value; }
代码说明
- 钩子选择:用
woocommerce_order_item_display_meta_value直接修改元数据的显示内容,无需改动原有字段的存储逻辑 - 场景过滤:先排除订单前台页面,只对邮件通知生效
- 邮件类型区分:仅针对
customer_开头的邮件(客户接收的各类订单通知)修改,管理员邮件不受影响 - 文件名提取:通过正则表达式从带预览和链接的HTML代码中提取纯文件名,替换原有的富内容
针对特定字段的替代方案
如果你的文件上传字段有固定的元数据key(比如_custom_file_upload),可以直接定位该字段处理:
add_action( 'woocommerce_order_item_meta_start', 'adjust_file_meta_for_customer_email', 10, 4 ); function adjust_file_meta_for_customer_email( $item_id, $item, $order, $plain_text ) { if ( is_wc_endpoint_url() ) return; $current_email = WC()->mailer()->get_current_email(); if ( !$current_email || !str_starts_with( $current_email->id, 'customer_' ) ) return; // 替换成你实际的文件上传字段元key $file_meta_key = '_custom_file_upload'; $file_path = $item->get_meta( $file_meta_key, true ); if ( $file_path ) { // 先移除插件原有的输出逻辑(需替换为插件实际的输出函数名,可通过Query Monitor等工具排查) remove_action( 'woocommerce_order_item_meta_start', 'plugin_file_output_function', 10 ); // 只输出纯文件名 echo '<li><strong>上传文件:</strong> ' . basename( $file_path ) . '</li>'; } }
提示:使用此方案时,需将_custom_file_upload替换为你实际的字段元key,plugin_file_output_function替换为插件负责输出预览图和链接的函数名。
内容的提问来源于stack exchange,提问作者Døner M.
相关产品推荐
相关产品推荐

