
WooCommerce通过其内置的邮件系统处理所有订单相关的通知。当我们需要发送自定义邮件或在现有邮件中添加特定内容时,通常会通过WordPress的动作钩子(Action Hooks)来介入。在邮件中添加附件是常见需求,例如发送礼品PDF、发票或其他文档。
实现附件发送的关键在于正确使用WooCommerce的邮件发送器实例 (WC()->mailer()) 及其 send() 方法。此方法不仅负责邮件内容的构建和发送,也支持附件的集成。
在尝试为WooCommerce自定义邮件添加附件时,开发者常遇到以下问题:
以下代码演示了如何在订单状态变为“已完成”且支付方式为“货到付款”时,向客户发送一封带有PDF附件的自定义邮件。
/**
* 在WooCommerce订单状态改变时发送带有附件的自定义邮件。
*
* @param int $order_id 订单ID。
* @param string $old_status 订单旧状态。
* @param string $new_status 订单新状态。
* @param WC_Order $order WC_Order 对象。
*/
function action_woocommerce_order_status_changed( $order_id, $old_status, $new_status, $order ) {
// 确保只有在订单状态变为“已完成”且支付方式为“dobirka”(货到付款)时才执行
if ( $new_status == 'completed' && $order->get_payment_method() == 'dobirka' ) {
// 获取WooCommerce邮件发送器实例
$mailer = WC()->mailer();
// 定义邮件接收者、主题和消息体
$to = $order->get_billing_email();
$subject = __( '您的订单已完成,请查收您的礼品!', 'woocommerce' );
$message_body = sprintf(
__( '亲爱的 %s,您的订单 #%s 已成功完成。请查收附件中的礼品。', 'woocommerce' ),
$order->get_billing_first_name(),
$order->get_order_number()
);
// 包装邮件消息,使其符合WooCommerce邮件模板的结构
// 第一个参数是邮件头部标题,第二个是邮件正文内容
$message = $mailer->wrap_message(
sprintf( __( '订单 #%s 已完成', 'woocommerce' ), $order->get_order_number() ),
$message_body
);
// 设置邮件头,确保邮件以HTML格式发送
$headers = 'Content-Type: text/html; charset=UTF-8' . "\r\n";
// 定义附件路径。使用 WP_CONTENT_DIR 常量确保路径正确。
// 假设您的PDF文件位于 wp-content 目录下
$attachments = array( WP_CONTENT_DIR . '/your-gift.pdf' ); // 请将 'your-gift.pdf' 替换为您的实际文件名
// 发送邮件
$mailer->send( $to, $subject, $message, $headers, $attachments );
}
}
// 注册钩子,优先级10,接受4个参数
add_action( 'woocommerce_order_status_changed', 'action_woocommerce_order_status_changed', 10, 4 );
add_action( 'woocommerce_order_status_changed', 'action_woocommerce_order_status_changed', 10, 4 );
条件判断:if ( $new_status == 'completed' && $order->get_payment_method() == 'dobirka' )
获取邮件发送器:$mailer = WC()->mailer();
邮件内容定义:$to, $subject, $message_body
包装邮件消息:$message = $mailer->wrap_message(...)
设置邮件头:$headers = 'Content-Type: text/html; charset=UTF-8' . "\r\n";
附件路径:$attachments = array( WP_CONTENT_DIR . '/your-gift.pdf' );
发送邮件:$mailer->send( $to, $subject, $message, $headers, $attachments );
通过遵循本文提供的指南和代码示例,您可以有效地在WooCommerce自定义邮件中集成附件功能。关键在于理解WooCommerce邮件系统的运作方式,使用正确的API调用(WC()->mailer()),并精确指定附件的文件系统路径(利用 WP_CONTENT_DIR)。这将确保您的自定义邮件不仅内容丰富,而且功能完善,为您的客户提供更专业的服务。
以上就是如何在WooCommerce自定义邮件中正确添加附件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号