WordPress自定义WooCommerce插件中使用Dompdf 3.1.0无法生成PDF的问题求助
WordPress自定义WooCommerce插件中使用Dompdf 3.1.0无法生成PDF的问题求助
各位好,我最近在开发一个自定义WooCommerce插件,核心功能是用户完成订单后自动生成优惠券PDF,但卡在Dompdf生成这一步了,实在搞不定,来求助大家!
情况是这样的:我用Dompdf 3.1.0写的PDF生成代码,单独拿出来测试完全没问题,PDF能正常生成并保存。但把这段代码放到WordPress的自定义插件里,绑定到woocommerce_order_status_completed钩子上之后,就完全没反应了——既没有报错,服务器里也找不到生成的PDF文件。
我已经做了这些排查:
- 确认Dompdf是通过Composer正确安装在插件目录的vendor文件夹里的,能成功实例化Dompdf对象,调用
render()、output()这些方法也没报错 - 专门在钩子函数里加了
error_log(),能看到订单ID正常输出,说明钩子确实被触发了 - 保存PDF的vouchers文件夹权限已经设为777,确保有写入权限
- 开启了PHP的错误显示和日志,不管是PHP错误日志还是WordPress的debug.log里都没有任何相关错误信息
- 试过两种生成方式:
stream()直接下载和output()后用file_put_contents()保存,两种在WordPress环境里都没效果,但单独运行都正常
下面是我插件的关键代码片段:
<?php /* Plugin Name: Voucher Generator Description: Generuje PDF z voucherem po zakupie. Version: 1.0 */ // 开启错误调试 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // 绑定WooCommerce订单完成钩子 add_action('woocommerce_order_status_completed', 'generate_voucher_pdf'); function generate_voucher_pdf($order_id) { // 引入Dompdf自动加载文件 require_once plugin_dir_path(__FILE__) . 'vendor/autoload.php'; use Dompdf\Dompdf; use Dompdf\Options; // 配置Dompdf选项 $options = new Options(); $options->set('defaultFont', 'Arial'); $options->set('debugKeepTemp', true); // 开启临时文件保留,方便调试 // 初始化Dompdf $dompdf = new Dompdf($options); // 准备PDF的HTML内容 $html = '<div style="padding: 20px;"><h1>您的订单优惠券</h1><p>订单编号:' . esc_html($order_id) . '</p></div>'; // 加载HTML并渲染 $dompdf->loadHtml($html); $dompdf->setPaper('A4', 'portrait'); $dompdf->render(); // 尝试保存PDF到服务器 $pdf_output = $dompdf->output(); $save_path = plugin_dir_path(__FILE__) . 'vouchers/voucher-' . $order_id . '.pdf'; // 这里加日志确认路径是对的 error_log('PDF保存路径:' . $save_path); file_put_contents($save_path, $pdf_output); }
实在想不通为什么在WordPress环境里就不行,有没有朋友遇到过类似的情况?或者能给我一些新的排查方向吗?比如是不是WordPress的输出缓冲区机制影响了Dompdf的渲染?或者钩子执行的环境有什么权限限制我没考虑到?
内容来源于stack exchange
相关产品推荐
相关产品推荐

