Я разрабатываю расширение 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:
Я отследил, где объект $order
путается в моем методе триггера для WC_Email.
Вызов этого фильтра woocommerce_order_get_items
разрушает объект $order.
add_filter( 'woocommerce_order_get_items', array( $this, 'check_items' ), 10, 2 );
Это моя строка кода: если я ее отключу, то смогу получить доступ к get_shipping_methods().