如何在WooCommerce新订单邮件中添加用户元数据作为占位符
修正WooCommerce新订单邮件自定义占位符代码
原代码存在的问题
- 未定义
$user变量,无法正确获取用户ID - 错误调用
$order->get_user_meta(),WC_Order类不存在该方法 - 第四行的
$wpcf_sales_rep变量未被使用,确实可以删除
修正后的代码
function wpa_filter_email_format_string( $string, $email ) { // 获取邮件对应的订单对象 $order = $email->object; // 确保订单对象有效,避免非订单邮件触发报错 if ( ! $order instanceof WC_Order ) { return $string; } // 获取订单关联的用户ID $user_id = $order->get_user_id(); // 处理访客订单(无用户ID)的情况,返回默认文本 $sales_rep = $user_id ? get_user_meta( $user_id, 'wpcf_sales_rep', true ) : '无销售代表'; // 定义自定义占位符映射 $new_placeholders = array( '{_sales_rep}' => $sales_rep, ); // 替换邮件内容中的占位符并返回 return str_replace( array_keys( $new_placeholders ), array_values( $new_placeholders ), $string ); } add_filter( 'woocommerce_email_format_string', 'wpa_filter_email_format_string', 20, 2 );
关键修正说明
- 增加类型检查:确保仅在处理WC_Order对象时执行逻辑,避免其他邮件类型触发错误
- 正确获取用户ID:通过
$order->get_user_id()从订单对象中提取关联用户ID - 兼容访客订单:针对未登录用户下单的场景,设置默认显示文本
- 修复元数据获取方式:使用原生
get_user_meta()函数获取用户自定义字段值
使用方法
将代码添加到当前主题的functions.php文件(或自定义代码插件)后,在WooCommerce后台的「新订单」邮件编辑界面中,插入{_sales_rep}占位符即可显示对应销售代表信息。
内容的提问来源于stack exchange,提问作者Potato_Clouds
相关产品推荐
相关产品推荐

