WooCommerce - 从单独的 PHP 文件访问“WC_Order”

Posted

技术标签:

【中文标题】WooCommerce - 从单独的 PHP 文件访问“WC_Order”【英文标题】:WooCommerce - Access 'WC_Order' from a separate PHP File 【发布时间】:2017-10-22 04:00:54 【问题描述】:

我使用 javascript 直接从 WooCommerce 中的 functions.php 文件(通过 Wordpress)调用 PHP 文件,该文件使用 GitHub 上提供的“PHP XLSXWriter”代码。但是,我无法访问

$order = new WC_Order($order_id);

我可以直接在 WooCommerce 后面使用这个功能吗?

 require_once('/wp-content/plugins/woocommerce/includes/class-wc-order.php');

?

这是我调用的整个 PHP 代码:

$order_id = $_GET['order']; // pull the order info from the URL 
$order = new WC_Order($order_id); // this crashes this entire function!
echo $order->shipping_city; // this then fails
echo $order->shipping_country; // and this fails too

// this code doesn't then execute...
$filename = "test.xlsx";
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');

$rows = array(
    array('Shipping Service Code',  'Company',  'Consignee Name',   'Address Line 1',   'Address Line 2',   'Address Line 3'),
    array('PPS',                    '-',        '-',                '-',                '-',                '-'),
);

$writer = new XLSXWriter();
$writer->setAuthor('EXAMPLE AUTHOR');

foreach($rows as $row)
$writer->writeSheetRow('Sheet1', $row);
$writer->writeToStdOut();

exit(0);

我得到的错误是:

 Fatal error: Class 'WC_Order' not found in C:\Webs\mysite.com\www\wp-admin\dhlgen.php on line 9

另一个想法是是否可以直接在我的 function.php 文件中调用 PHP 代码。但是,我将它放在 meta_box 按钮上,因此当我单击按钮本身时,它只会保存订单而不执行我的 PHP 代码。我认为这可能是因为 XLSXWriter 逻辑需要停止页面才能转储它无法执行的 Excel 电子表格文件,因此它会超时并继续保存页面。

谢谢。

【问题讨论】:

【参考方案1】:

您应该能够通过包含 wp-blog-header 文件来访问 WordPress 环境(包括 WooCommerce):

require('path/to/wp-blog-header.php');

或者,wp-load 文件:

require('path/to/wp-load.php');

Intergration Docs | Related Question

【讨论】:

好的,现在我遇到了一个新错误。 “可捕获的致命错误:WC_Order 类的对象无法转换为字符串”。这一行: echo $order; 那是因为$order 是一个对象,而不是一个字符串。如果您想查看$order 包含的内容,请使用var_dump($order) 完美!现在工作很好。对此感激不尽。这个文件将被公众阅读,不是吗?有什么办法可以解决吗?? 当然,没问题!是的,任何知道它在那里的人都可以访问它。您可以使用header('Access-Control-Allow-Origin: your-domain.com'); 来帮助控制对该文件的访问。 啊,是的,这确实有效。问题是 XLSX paser 例程不喜欢我的回声仍然在那里,因为当我试图打开文件时,它已损坏。再次感谢你的帮助。传奇。

以上是关于WooCommerce - 从单独的 PHP 文件访问“WC_Order”的主要内容,如果未能解决你的问题,请参考以下文章

php 活动门票加:WooCommerce:强制所有门票“单独出售”。

php 活动门票加:WooCommerce:强制所有门票“单独出售”。

在Woocommerce电子邮件通知中将税总额添加为单独的行

WooCommerce 搜索结果模板

WooCommerce - 从 functions.php 文件发送新订单/客户发票电子邮件

如何从功能,PHP设置WooCommerce通知?