2017-01-20 4 views
1

Я использую mpdf для wordpress для создания PDF-файлов. Я работаю над функциональностью, которая будет отправлять еженедельный отчет моим пользователям, и этот отчет должен быть отправлен по электронной почте, а pdf будет прикреплен по электронной почте.генерировать еженедельный отчет pdf с mpdf - functions.php

Моя проблема заключается в том, что я запускаю код в файле 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 

Как я могу решить эту проблему? Может быть, мне нужно использовать мою функцию в каком-то действии? но какой? Любые идеи, пожалуйста?

+0

check: /home/user/public_html/doms/wp-admin/includes/template.php:1995 Часто проблема заключается в пробеле в конце php-файла (удалите закрывающие теги php, чтобы предотвратить это) –

+0

, но это файл wordpress core. Если я удалю закрывающий тег php, то при следующем обновлении мне нужно будет это сделать повторно. И то же самое при каждом обновлении wordpress. @SanderBackus – aidadev

+0

Я проверил и на этой строке (/home/user/public_html/doms/wp-admin/includes/template.php:1 995) нет нечетного пробела/закрывающего тега, и это даже не последняя строка этот файл. Существует тег закрытия/открытия php, но он должен быть там. Любые другие предложения? @SanderBackus – aidadev

ответ

1

Наконец нашел решение. Поэтому я создал файл php в моей папке темы и в самом верху файла добавлен код require('../../../wp-load.php');, который делает все доступные функции Wordpress внутри него, даже если этот файл не является страницей шаблона Wordpress. Так как теперь все функции доступны внутри этого файла, я переместил свой код из файла functions.php в этот файл, и я уже выполняю работу cron в этом файле. Надеюсь, это поможет кому-то другому.

+0

Я просто сделал это тоже, и это сработало, но вы должны сделать его динамической ссылкой, а не ../../ ../ если это распределенный плагин, например 'require $ _SERVER ['DOCUMENT_ROOT']. '/wp-load.php'; ' – PaulMrG

+0

Да, конечно, спасибо за то, что @PaulMrG – aidadev

0

Сохранить report.php буфер вывода $x с помощью exec():

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'); 
} 
+0

Не помогает вообще. Те же ошибки @ShutUpMagda – aidadev

+0

Попробуйте использовать 'ob_start()' перед вызовом класса MPDF. – ShutUpMagda

+0

Я пробовал, не помогает – aidadev