2017-01-24 6 views
2

私はWordpressを実行していて、複数のユーザーがいます。各ユーザーは、そのユーザーのみに関連したいくつかの一意の情報を含む毎週のレポートを受け取る必要があります。情報はPDF(pdfsを生成するためのmpdfを使用)で収集し、それに応じて各ユーザーの電子メールに送信する必要があります。ループ内の各ユーザーに固有のコンテンツを含むPDFを生成し、対応するユーザーの電子メールに各PDFを送信する -

私はreport.phpファイルを持っている(私はレポートを毎週送信するには、このファイルにはcronジョブを実行する)と、ここに私のコードです:私は上記のコード実行している場合は

include('mpdf/mpdf.php'); 
$mpdf = new mPDF(); 

$args = array(
    'post_type' => 'users', 
    'post_status' => array('publish'), 
    'order' => 'DESC', 
    'posts_per_page'=> -1 
); 
$list = get_posts($args); 
if($list){ 
    foreach($list as $suppItem){ 
     $userID = $suppItem->ID; 
     ob_start(); 
     getUserReport($userID); /* this is the function which genarates html content 
     for each user because the content of course for each user is unique */ 

     $x = ob_get_contents(); 
     ob_end_clean(); 
     $mpdf->WriteHTML($x); 
     $today = date('Y-m-d'); 
     $pdfName = 'weekly-report-'.$userID.'-'.$today.'.pdf'; 
     $content = $mpdf->Output($pdfName, 'S'); 
     $content = chunk_split(base64_encode($content)); 
     $email = get_field('user_e_mail_address', $userID); 
     if($email) { 
      $mailto = $email; 
     } 
     $from_name = 'Website'; 
     $from_mail = '[email protected]'; 
     $replyto = '[email protected]'; 
     $uid = md5(uniqid(time())); 
     $subject = 'Weekly report of '.get_the_title($userID); 
     $message = 'Attached find this week report.'; 
     $filename = $pdfName; 

     $header = "From: ".$from_name." <".$from_mail.">\r\n"; 
     $header .= "Reply-To: ".$replyto."\r\n"; 
     $header .= "MIME-Version: 1.0"."\r\n"; 
     $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\""."\r\n"; 
     $finalmessage .= "--".$uid."\r\n"; 
     $finalmessage .= "Content-type:text/plain; charset=iso-8859-1"."\r\n"; 
     $finalmessage .= "Content-Transfer-Encoding: 7bit"."\r\n"; 
     $finalmessage .= $message."\r\n"; 
     $finalmessage .= "--".$uid."\r\n"; 
     $finalmessage .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n"; 
     $finalmessage .= "Content-Transfer-Encoding: base64\r\n"; 
     $finalmessage .= "Content-Disposition: attachment; filename=\"".$filename."\""."\r\n"; 
     $finalmessage .= $content."\r\n"; 
     $finalmessage .= "--".$uid."--"; 

     if (mail($mailto, $subject, $finalmessage, $header)) { 
      echo 'Sent!'; 
     } else { 
      echo 'error'; 
     } 
    } 
} 

、それはそれぞれにメールを送信PDFを添付したユーザーですが、内容はすべて同じです。 PDFファイル名は期待どおりですが、内容が間違っています(ループ内の最初の項目を除く)。実際には、最初のユーザーのメール本文とPDFは正しいですが、残りのユーザーのPDFは空白のページがある最初のユーザーの同じ内容です。

私はforeachループの外側に$content = $mpdf->Output($pdfName, 'S');を移動しようとしましたが、その場合、すべてのユーザーのコンテンツをまとめて同じPDFで送信します。しかし、各ユーザーは対応するPDFを受け取る必要があります。

対応するユーザーの電子メールに対応するPDFを送信するために、ループの内側/外側に何がないのだろうかと思います。

+0

'var_dump($ x);'の後に 'ob_end_clean();'どのような結果になるでしょうか? – EniGma

+0

これは、各ユーザーのコンテンツ@EniGma – aidadev

+0

を返します。このページの 'echo'や' var_dump'は完全に動作します。しかし、個別に各ユーザーにpdfを送信すると、正しく動作しません。 @EniGma – aidadev

答えて

1

UPDATE:

が最後にそれが働いています。私はforeachループにこの行($mpdf = new mPDF())を移動しようとしました!下に私のコードがループ内の様子を見ることができます:

$mpdf = new mPDF(); 
ob_start(); 
getUserReport($userID); 
$html = ob_get_contents(); 
ob_end_clean(); 
$mpdf->WriteHTML($html); 

私はこれが将来誰かを助けることを願っています!

0

私の意見では、ob_get_contents()はたびに最初のエントリを取得します。 ob_get_contents()をクリアできますか?または、getUserReport(...) -Methodから文字列としてHTMLコードを返そうとすることもできます。

EDIT

... 
$html = getUserReport(...); // get the report 
$mpdf->WriteHTML($html);  // write the report to pdf 
$html = "";     // clear the local variable 
... 
+0

'getUserReport()'関数からhtmlを返そうとしましたが、各ユーザの情報を正しく返します@Patrick Vogt – aidadev

+0

これは素晴らしいことです。そして、もしあなたが 'WriteHTML(html)'関数にhtmlを入れてしまったら、それはうまくいきませんか? –

+0

それが動作します。問題は電子メールを送信するとき、そしてmu質問で説明した方法ですが、各ユーザーの電子メールに電子メールを送信しますが、PDFコンテンツは同じです@Patrick Vogt – aidadev

関連する問題