使用 mpdf 生成每周报告 pdf - functions.php

generate weekly report pdf with mpdf - functions.php

我在 wordpress 上使用 mpdf 生成 PDF 文件。我正在开发一项功能,该功能将每周向我的用户发送报告,该报告应作为电子邮件发送,并且 pdf 将附加在电子邮件中。

我的问题是我 运行 代码在 functions.php 文件中,因为对于每周 运行 这段代码,我将使用服务器端 cron 作业和我的函数应该在 functions.php 文件中执行它。所以我在 functions.php 文件中添加了这段代码:

function weeklyReportFunc(){
    include('mpdf/mpdf.php');
    $mpdf = new mPDF();
    ob_start();
    require get_template_directory() . '/includes/report.php';
    $x = ob_get_contents();
    ob_end_clean();
    $mpdf->WriteHTML($x);
    $today = date('Y-m-d');
    $pdfName = 'weekly-report-'.$today;
    $mpdf->Output($pdfName.'.pdf', 'D');
}

这显示了以下错误:

Warning: Cannot modify header information - headers already sent by (output started at 
/home/user/public_html/doms/wp-admin/includes/template.php:1995) in /home/user/public_html/
doms/wp-content/themes/mytheme/mpdf/mpdf.php on line 8314

Warning: Cannot modify header information - headers already sent by (output started at 
/home/user/public_html/doms/wp-admin/includes/template.php:1995) in   
/home/user/public_html/doms/wp-content/themes/mytheme/mpdf/mpdf.php on line 1706
mPDF error: Some data has already been output to browser, can't send PDF file

我该如何解决这个问题?也许我需要在某些操作中使用我的功能?但是哪一个?有什么想法吗?

使用 exec():

report.php 输出缓冲区保存到 $x
function weeklyReportFunc(){
    ob_start();
    include('mpdf/mpdf.php');
    $mpdf = new mPDF();
    exec('php -f '.get_template_directory().'/includes/report.php',$output);
    $x = $output[0];
    $mpdf->WriteHTML($x);
    $today = date('Y-m-d');
    $pdfName = 'weekly-report-'.$today;
    $mpdf->Output($pdfName.'.pdf', 'D');
}

终于找到解决办法了。所以我在我的主题文件夹中创建了一个 php 文件,并在文件的最顶部添加了 require('../../../wp-load.php'); 代码,使所有 wordpress 功能在其中可用,即使这个文件不是 wordpress 模板页面。所以现在所有功能都可以在这个文件中使用,我将我的代码从 functions.php 文件移动到这个文件并且我已经在这个文件上 运行 cron 作业。希望这会对其他人有所帮助。