You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中如何将新订单邮件转PDF并添加附件,解决样式及图片问题

WordPress/WooCommerce 订单邮件转PDF问题解决方案

问题概述

使用WordPress+WooCommerce实现「New Order」邮件转PDF附件功能时,通过Dompdf库遇到以下问题:

  • 图片缺失,报错「Image not found or type unknown」
  • 邮件中少量内容单独占满PDF一页
  • 自定义短代码获取的订单信息消失
  • 文本移位,表格内文本移出导致表格为空

针对性修复方案

1. 解决图片缺失问题

Dompdf对图片路径要求严格,需使用绝对路径或完整URL。原代码的setBasePath设置不完整,需替换为WordPress上传目录的绝对路径,同时批量替换邮件内容中的相对图片路径:

// 获取WordPress上传目录的绝对路径与URL
$upload_dir = wp_upload_dir();
$base_path = $upload_dir['basedir'] . '/';
$base_url = $upload_dir['baseurl'] . '/';

// 将邮件内的相对图片路径替换为完整URL
$body = str_replace('src="/wp-content/uploads/', 'src="' . $base_url, $body);

2. 修复样式与内容完整性问题

  • 启用远程资源加载,确保外部图片、字体可正常获取
  • 设置标准纸张尺寸与方向,避免分页异常
  • 提前解析短代码,确保订单信息被渲染
  • 添加临时文件清理逻辑,避免服务器冗余文件

完整修改代码

use Dompdf\Dompdf;
use Dompdf\Options;

function htmlToPdf($html, $outputFile) {
    // 初始化Dompdf配置
    $options = new Options();
    $options->set('isRemoteEnabled', true); // 允许加载远程资源
    $options->set('defaultPaperSize', 'A4'); // 设置默认纸张尺寸
    $options->set('defaultPaperOrientation', 'portrait'); // 设置纸张方向

    $dompdf = new Dompdf($options);

    // 设置上传目录为基础路径
    $upload_dir = wp_upload_dir();
    $dompdf->setBasePath($upload_dir['basedir'] . '/');

    $dompdf->loadHtml($html);
    $dompdf->render();

    file_put_contents($outputFile, $dompdf->output());
}

function ajouter_contenu_en_piece_jointe($phpmailer) {
    if (strpos($phpmailer->Subject, 'New Order') !== false) {
        $body = $phpmailer->Body;

        // 解析邮件内容中的短代码,确保订单信息完整渲染
        $body = do_shortcode($body);

        // 替换相对图片路径为完整URL
        $upload_dir = wp_upload_dir();
        $body = str_replace('src="/wp-content/uploads/', 'src="' . $upload_dir['baseurl'] . '/', $body);

        // 使用WordPress上传目录存储临时PDF,避免权限问题
        $temp_path = wp_upload_dir()['path'];
        $filename = $temp_path . '/New_order_' . time() . '.pdf';
        
        htmlToPdf($body, $filename);

        if (file_exists($filename)) {
            $phpmailer->AddAttachment($filename, 'New_order.pdf');
            // 邮件发送后删除临时文件
            add_action('wp_mail_succeeded', function() use ($filename) {
                file_exists($filename) && unlink($filename);
            });
        }
    }
}
add_action('phpmailer_init', 'ajouter_contenu_en_piece_jointe');

额外注意事项

  • 确保使用最新版Dompdf,旧版本存在样式解析bug
  • 邮件模板优先使用内联CSS,Dompdf对外部CSS支持有限
  • 检查服务器是否开启allow_url_fopen或curl,确保远程资源可加载

内容的提问来源于stack exchange,提问作者Orare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:33:34