如何为WooCommerce客户发票邮件添加底部Pay Now按钮并修复参数错误
问题解决:WooCommerce邮件添加Pay Now按钮时的参数错误
错误原因
你使用的woocommerce_email_footer钩子默认仅传递1个参数($email对象),但你在add_action里声明要传递2个参数,同时函数定义要求接收$order和$email两个参数,导致实际传入参数数量不匹配,触发致命错误。另外你的HTML链接代码存在语法错误,引号使用混乱。
修复后的代码
// Add Pay Now button to invoice email add_action('woocommerce_email_footer', 'rnr_customer_order_invoice_paynow', 20, 1 ); function rnr_customer_order_invoice_paynow( $email ) { // 确认邮件是客户发票类型,且邮件关联的对象是订单 if ( $email->id == 'customer_invoice' && is_a( $email->object, 'WC_Order' ) ) { $order = $email->object; $pay_now_url = esc_url( $order->get_checkout_payment_url() ); // 输出正确的Pay Now按钮HTML(附带基础样式提升显示效果) echo '<a href="' . $pay_now_url . '" style="padding: 10px 20px; background-color: #007cba; color: white; text-decoration: none; border-radius: 4px;">Pay Now</a>'; } }
关键修正点
- 调整
add_action的最后一个参数为1,匹配钩子实际传递的参数数量 - 通过
$email->object获取订单对象,这是WooCommerce邮件类中存储关联订单的标准属性 - 修复HTML链接的语法错误,同时添加基础内联样式让按钮更符合邮件场景(可选)
- 增加
is_a()判断,确保获取的对象是有效的订单实例,避免潜在报错
内容的提问来源于stack exchange,提问作者AJD
相关产品推荐
相关产品推荐

