В чем разница между WC() и $woocommerce


Я хочу отменить некоторые переменные сеанса WooCommerce, потому что на странице загрузки крючки, которые я использую, не сработали, что оставляет данные предыдущего сеанса заполняющими таблицу доставки при оформлении заказа.

В рамках любых функций, доступных с помощью обратных вызовов, я могу получить доступ к сеансам WooCommerce, таким как:

WC()->session->get('foo');

Однако, когда вне этих обратных вызовов WC не определено. Я попробовал установить:

global $woocommerce; и доступ через $woocommerce->session->__unset('foo');, но получил уведомление:

Попытка получить свойство не-объекта

И ошибка:

Неустранимая ошибка: Неперехваченная ошибка: Вызов функции-члена __unset() при нулевом значении

Итак, очевидно, что этот $woocommerce глобальный не такой же, как WC (который, я полагаю, подвергается воздействию крючков?)

Я думаю, что могу отключить эти переменные, используя один из первых крючков, который сработает на странице оформления заказа, но это заставило меня задуматься:

В чем разница между WC() и $woocommerce? Разве это не оба способа доступа к методам WooCommerce?

Author: armadadrive, 2017-08-05

1 answers

wc(); возвращает одноэлементный экземпляр WooCommerce, чтобы предотвратить необходимость использования глобальных значений.

WC устанавливает $woocommerce глобальный таким образом: $GLOBALS['woocommerce'] = wc();, поэтому использование одного или другого кажется одинаковым...

РЕДАКТИРОВАТЬ

Что касается ваших ошибок, вы получили их, потому что $woocommerce->session не был установлен. WC инициализирует WC_Session_Handler только по интерфейсным или CRON-запросам. Выберите свой крючок действия соответствующим образом.

 6
Author: ClemC, 2017-08-05 16:41:30