我希望有一个人可以帮助我。
我想要实现的目标:
我想在订单发生后立即创建自动PDF发票并将其下载到文件夹。它不必显示。
我的问题:
我只关心PDF的创建。不知何故,我无法创建和下载PDF。我已经在这里阅读了关于这个问题的类似问题,但是无法弄清楚问题。
到目前为止我做了什么:
我有一个插件,必须集成自动计费。在插件文件夹(... / wp-content / plugins / myplugin /)中,我创建了一个文件夹fpdf并安装了fpdf。
fpdf.php位于... /myplugin/fpdf/fpdf.php
我创建了一个包含以下代码的文件进行测试。这也在fpdf文件夹中(... /myplugin/fpdf/pdf_creation.php):
<?php
require(plugin_dir_path( __FILE__ ).'fpdf/fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
//$filename = '/wp-content/plugins/myplugin/rechnungen/rechnung.pdf';
//$pdf->Output($filename,'F');
//testing output
$pdf->Output();
?>
我得到了什么:
如果我尝试直接在浏览器中打开PDF,我会在Firefox中获得一个http ERROR 500(Chrome)白页。
我希望你们中的一个能帮助我 最好的问候
答案 0 :(得分:0)
你不能使用wordpress&#39;函数在wordpress中未包含的文件中。你得到错误500(内部服务器错误)的原因是在wordpress之外调用wordpress-function plugin_dir_path
(即直接访问php文件时)会给你一个致命的错误,因为它根本就不存在!
要获得致命错误的一些提示(通常只显示空白页面和响应代码500),请确保首先启用display_errors
:
<?php
ini_set('display_errors', 1);
//...other code here
确保在完成开发后将其删除 - 您不希望通过永久保密来泄露敏感信息!
至于实际行动&#34;周围&#34; wordpress用于创建PDF,它首先可能不是最好的主意 - 因为稍后您可能需要访问许多其他wordpress函数。
我喜欢做的事情是这样的:
<?php
/*
Plugin Name: Test plugin
Plugin URI:
Description: Whatever
Version: 0.01
Author: Mikk3lRo
*/
myplugin::init();
class myplugin {
static function init() {
register_activation_hook(__FILE__, array(__CLASS__, 'on_activate'));
register_deactivation_hook(__FILE__, array(__CLASS__, 'on_deactivate'));
add_action('init', array(__CLASS__, 'rewrites'));
add_filter('query_vars', array(__CLASS__, 'query_vars'));
add_filter('template_redirect', array(__CLASS__, 'get_pdf'),0);
}
static function on_activate() {
self::rewrites();
flush_rewrite_rules();
}
static function on_deactivate() {
flush_rewrite_rules();
}
static function rewrites() {
/* This basically catches everything
below http://yourdomain.com/get-pdf/
and passes it to your pdf-generating
script, so your URL's can be:
http://yourdomain.com/get-pdf/invoice-1.pdf
http://yourdomain.com/get-pdf/My-invoice-for-you.pdf
...or whatever your like... */
add_rewrite_rule('get-pdf', 'index.php?myplugin_show_pdf=true', 'top');
}
static function query_vars($vars) {
$vars[] = 'myplugin_show_pdf';
return $vars;
}
static function get_pdf() {
if (get_query_var('myplugin_show_pdf')) {
include_once __DIR__ . '/get_pdf.php';
}
}
}
然后,您可以在get_pdf.php
中执行任何操作,并且可以完全访问正常的wordpress环境:
<?php
$pdf_slug = basename($_SERVER['REQUEST_URI']);
require(plugin_dir_path( __FILE__ ).'fpdf/fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Cell(40,10,'This is the pdf for: ' . $pdf_slug);
//$pdf->Output($filename,'F');
$pdf->Output();
die();
另一方面,我建议使用TCPDF - 它是FPDF的一个分支,在其他一些改进中对UTF8有更好的支持。在开发的这一点上,切换起来应该很容易。