问题描述
大家好,
在脚本中如下所示,我需要在HTML代码中插入PHP脚本,但我在文档中找不到任何显示该操作方法的示例。
那可能吗?
1°我使用WordPres
2°,我使用Woocommerce
3°,我必须打印谢谢页面。在“谢谢”页面上,我有一个按钮,单击并下载文件。
4°生成PDF文件的PHP文件必须接收动态数据。
5°,PHP脚本必须包含在HTML代码中,如下所示。
6°当我单击按钮下载PDF文件时,出现以下错误消息。
通知::未定义的变量:在行中的 C:\ xampppserver2 \ htdocs \ mrdigital \ wp-content \ themes \ astra-child \ testmpdf.PHP 中的顺序> 22
致命错误:未捕获的错误:在C:\ xampppserver2 \ htdocs \ mrdigital \ wp-content \ themes \ astra-child \ testmpdf.PHP中调用成员函数get_order_number()时为null: 22堆栈跟踪:#0 {main}放在 22 行中的 C:\ xampppserver2 \ htdocs \ mrdigital \ wp-content \ themes \ astra-child \ testmpdf.PHP 中
这是 22
行
$ order = $ _GET [$ order-> get_order_number()];
<?PHP
/**
* @Author: exame
* @Last Modified time: 2020-11-05 15:47:01
*/
use Mpdf\Mpdf;
require_once __DIR__ . '/vendor/autoload.PHP';
$mpdf = new Mpdf();
$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/custom/temp/dir/path']);
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8','orientation' => 'P','format' => 'A4'
]);
$order = $_GET[$order->get_order_number()];
$order = $_GET[$order->get_date_created()];
$html = '
<div id="pdfprintcontentarea">
<p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received">Obrigado. Seu pedido foi recebido. Enviamos o comprovante de compra por e-mail para você.</p>
<p>Tempo de Reserva do Pedido: <b>24 horas</b> - Por favor efetue o pagamento agora antes que você perca a reserva!</p>
<ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">
<li class="woocommerce-order-overview__order order">
<strong>$order->get_order_number();</strong>
</li>
<li class="woocommerce-order-overview__date date">
Hora: <strong>10:56:01.507644</strong>
</li>
<li class="woocommerce-order-overview__date date">
<strong>wc_format_datetime( $order->get_date_created() );</strong>
</li>
<li class="woocommerce-order-overview__total total">
Total: <strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">R$</span>5,00</bdi></span></strong>
</li>
<li class="woocommerce-order-overview__total total">
Status Pedido: <strong>Aguardando</strong>
</li>
<li class="woocommerce-order-overview__payment-method method">
Método de pagamento: <strong>Transferência Bancária Rápida e Gratuita pelo Aplicativo do Banco</strong>
</li>
</div> <!-- <div id="pdfprintcontentarea"> -->
';
//$html = file_get_contents(__DIR__. '/woocommerce/checkout/thankyou.PHP');
$mpdf->SetProtection(array(),'','MyPassword');
$mpdf->WriteHTML($html,\Mpdf\HTMLParserMode::HTML_BODY);// Load the html
$mpdf->Output('invoice.pdf',"D");
$mpdf->cleanup();
请问如何解决这种情况?
先谢谢您!
解决方法
您需要在创建wc_get_order
之后运行它,并且,找到一种获取订单ID的简便方法。这是我下面提出的解决方案。
<?php
/**
* @Author: exame
* @Last Modified time: 2020-11-05 15:47:01
*/
use Mpdf\Mpdf;
require_once __DIR__ . '/vendor/autoload.php';
function pekky_print_pdf( $order_id ) {
$mpdf = new Mpdf();
$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/custom/temp/dir/path']);
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8','orientation' => 'P','format' => 'A4'
]);
$order = wc_get_order( $order_id );
$html = '
<div id="pdfprintcontentarea">
<p class="woocommerce-notice woocommerce-notice--success woocommerce-thankyou-order-received">Obrigado. Seu pedido foi recebido. Enviamos o comprovante de compra por e-mail para você.</p>
<p>Tempo de Reserva do Pedido: <b>24 horas</b> - Por favor efetue o pagamento agora antes que você perca a reserva!</p>
<ul class="woocommerce-order-overview woocommerce-thankyou-order-details order_details">
<li class="woocommerce-order-overview__order order">
<strong>$order->get_order_number();</strong>
</li>
<li class="woocommerce-order-overview__date date">
Hora: <strong>10:56:01.507644</strong>
</li>
<li class="woocommerce-order-overview__date date">
<strong>wc_format_datetime( $order->get_date_created() );</strong>
</li>
<li class="woocommerce-order-overview__total total">
Total: <strong><span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">R$</span>5,00</bdi></span></strong>
</li>
<li class="woocommerce-order-overview__total total">
Status Pedido: <strong>Aguardando</strong>
</li>
<li class="woocommerce-order-overview__payment-method method">
Método de pagamento: <strong>Transferência Bancária Rápida e Gratuita pelo Aplicativo do Banco</strong>
</li>
</div> <!-- <div id="pdfprintcontentarea"> -->
';
//$html = file_get_contents(__DIR__. '/woocommerce/checkout/thankyou.php');
$mpdf->SetProtection(array(),'','MyPassword');
$mpdf->WriteHTML($html,\Mpdf\HTMLParserMode::HTML_BODY);// Load the html
$mpdf->Output('invoice.pdf',"D");
$mpdf->cleanup();
}
// Hook to a woo func.
add_action( 'woocommerce_before_thankyou','pekky_print_pdf',10,1 );
,
非常感谢您的帮助。 这就是我扭转局势的方式。
1°,您需要知道我在Template-Child中定制了 mPDF Composer安装,并且在Default Root文件夹中定制了 NOT 。
2°,我必须明确地引用Wordpress wp-config.php 文件,否则,由于我的自定义安装,该文件永远无法正常工作。
3°,我必须明确地引用Woocommerce类 class-wc-order.php 文件。
4°现在,在代码中如下所示,我可以接收 order对象,并操纵所需的东西。
代码:
<?php
// Root Directory WP Config
require_once '/xampppserver2/htdocs/mrdigital/wp-config.php';
// Root Directory CLASS WC ORDER
require_once '../../plugins/woocommerce/includes/class-wc-order.php';
// Load MPDF Loader
require_once __DIR__ . '/vendor/autoload.php';
use Mpdf\Mpdf;
$mpdf = new Mpdf();
$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/custom/temp/dir/path']);
$order = new WC_Order($_GET['key']);