【发布时间】:2014-11-18 12:23:08
【问题描述】:
我正在开发一个 woocommerce 扩展程序,并在我的一个类中包含以下代码部分。
$order = new WC_Order(159);
$shipping_methods = $order->get_shipping_methods();
print_r($shipping_methods);
这将返回一个空数组,如此处所示。
[24-Sep-2014 04:05:02 UTC] Array
(
)
如果我在主题中放置完全相同的代码,而不是按预期填充数组并返回以下内容
Array
(
[10] => Array
(
[name] => International Delivery
[type] => shipping
[item_meta] => Array
(
[method_id] => Array
(
[0] => international_delivery
)
[cost] => Array
(
[0] => 175
)
)
[method_id] => international_delivery
[cost] => 175
)
)
我已经尝试过调试它,但我终其一生都无法弄清楚我错过了什么。相同的三行代码在主题中有效,但在插件中无效。我错过了一个全局变量或其他变量吗?
编辑:
我正在创建的订单对象已经是一个完整的订单,我只是从中查询信息。我不确定这是否是下面建议的加载问题。
当我 var_dump $order 时,它也向我展示了订单对象。 WC_Abstract_Order 继承的方法在这一点上不起作用有什么原因吗?
WP_DEBUG 已打开,没有产生错误或警告。
还要注意,这是在扩展WC_Email 的类中。
编辑2:
我已经在我的 WC_Email 触发方法中找到了 $order 对象被弄乱的地方。
调用此过滤器woocommerce_order_get_items 会破坏$order 对象。
add_filter( 'woocommerce_order_get_items', array( $this, 'check_items' ), 10, 2 );
这是我的代码行,如果我禁用它,我就可以访问get_shipping_methods().
【问题讨论】:
标签: wordpress woocommerce shipping