
WooCommerce提供了一个强大的邮件系统,允许开发者发送各种通知邮件。当我们需要在自定义邮件中包含附件时,关键在于正确地实例化邮件发送器(Mailer)并提供附件的绝对路径。常见的错误包括使用过时的方法、不正确的附件路径或遗漏必要的邮件头部信息。
为了在WooCommerce自定义邮件中添加附件,我们需要遵循以下步骤:
下面是一个完整的代码示例,演示了如何在订单状态变为“已完成”且支付方式为“dobirka”时,向客户发送一封带附件的自定义邮件:
/**
* 在WooCommerce订单状态改变时发送带附件的自定义邮件。
*
* @param int $order_id 订单ID。
* @param string $old_status 订单旧状态。
* @param string $new_status 订单新状态。
* @param WC_Order $order WC_Order 对象。
*/
function custom_woocommerce_order_status_changed_send_email_with_attachment( $order_id, $old_status, $new_status, $order ) {
// 检查订单状态是否变为 'completed' 且支付方式为 'dobirka'
if ( 'completed' === $new_status && 'dobirka' === $order->get_payment_method() ) {
// 获取 WooCommerce 邮件发送器实例
$mailer = WC()->mailer();
// 邮件收件人:订单的账单邮箱
$to = $order->get_billing_email();
// 邮件主题
$subject = sprintf( __( '您的订单 #%s 附带礼品', 'woocommerce' ), $order->get_order_number() );
// 邮件正文
$message_body = sprintf(
__( '亲爱的 %s,您的订单 #%s 已完成。感谢您的购买,随信附上我们为您准备的惊喜礼品。', 'woocommerce' ),
$order->get_billing_first_name(),
$order->get_order_number()
);
// 邮件头部(包含主题行)
// wrap_message 方法用于将邮件内容包装成标准的 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";
// 附件的绝对路径。请确保 'your-gift-file.pdf' 存在于 wp-content 目录下
// 替换 'your-gift-file.pdf' 为你的实际文件名
$attachments = array( WP_CONTENT_DIR . '/your-gift-file.pdf' );
// 发送邮件
$mailer->send( $to, $subject, $message, $headers, $attachments );
}
}
// 注册钩子,优先级为 10,接受 4 个参数
add_action( 'woocommerce_order_status_changed', 'custom_woocommerce_order_status_changed_send_email_with_attachment', 10, 4 );
通过遵循上述指南并利用提供的代码示例,您可以有效地在WooCommerce自定义邮件中添加附件。关键在于使用现代化的API、提供准确的附件绝对路径,并确保邮件头部信息正确。在部署到生产环境之前,务必在开发环境中进行充分的测试,以确保附件能够正确发送并被接收方打开。
以上就是深入解析:在WooCommerce自定义邮件中添加附件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号