如何在WooCommerce PDF优惠券插件邮件模板中显示账单名字?
问题分析与解决方案
两种写法的问题点
- 第一种写法:直接使用
$order_id变量,但当前邮件模板上下文未定义该变量,导致wc_get_order()无法获取有效订单对象,自然无法拿到客户名字。 - 第二种写法:
$email->object在该PDF优惠券邮件模板中对应的是优惠券对象(voucher),而非订单对象,直接调用订单方法会失效;get_billing_first_name是WooCommerce订单对象的方法,你漏掉了末尾的括号(),写成了属性调用,即便拿到订单对象也无法正确取值。
正确实现方式
根据插件文档提示,通过优惠券对象获取订单后提取账单名字,代码示例如下:
<?php do_action( 'woocommerce_email_header', $email_heading, $email ); ?> <?php // 从优惠券对象获取关联订单 $order = $voucher->get_order(); // 校验订单对象有效性,避免报错 if ( $order instanceof WC_Order ) { $first_name = $order->get_billing_first_name(); // 整合客户名字到邮件文案 printf( __( "Hi %s. You've been sent a voucher!", 'woocommerce-pdf-product-vouchers' ), esc_html( $first_name ) ); } else { // 订单无效时显示默认文案 printf( _n( "Hi there. You've been sent a voucher!", "Hi there. You've been sent %d vouchers!", $voucher_count, 'woocommerce-pdf-product-vouchers' ), $voucher_count ); } ?> <?php do_action( 'woocommerce_email_footer', $email ); ?>
补充说明
- 该PDF优惠券插件的邮件模板默认会传入
$voucher变量,无需额外定义; - 使用
esc_html()转义输出内容,避免XSS安全风险; - 增加订单对象校验,防止因订单数据异常导致邮件渲染失败。
内容的提问来源于stack exchange,提问作者SolaceBeforeDawn
相关产品推荐
相关产品推荐

