В чем разница между WC() и $woocommerce
Я хочу отменить некоторые переменные сеанса WooCommerce, потому что на странице загрузки крючки, которые я использую, не сработали, что оставляет данные предыдущего сеанса заполняющими таблицу доставки при оформлении заказа.
В рамках любых функций, доступных с помощью обратных вызовов, я могу получить доступ к сеансам WooCommerce, таким как:
WC()->session->get('foo');
Однако, когда вне этих обратных вызовов WC
не определено. Я попробовал установить:
global $woocommerce;
и доступ через $woocommerce->session->__unset('foo');
, но получил уведомление:
Попытка получить свойство не-объекта
И ошибка:
Неустранимая ошибка: Неперехваченная ошибка: Вызов функции-члена __unset() при нулевом значении
Итак, очевидно, что этот $woocommerce
глобальный не такой же, как WC
(который, я полагаю, подвергается воздействию крючков?)
Я думаю, что могу отключить эти переменные, используя один из первых крючков, который сработает на странице оформления заказа, но это заставило меня задуматься:
В чем разница между WC()
и $woocommerce
? Разве это не оба способа доступа к методам WooCommerce?
1 answers
wc();
возвращает одноэлементный экземпляр WooCommerce
, чтобы предотвратить необходимость использования глобальных значений.
WC устанавливает $woocommerce
глобальный таким образом: $GLOBALS['woocommerce'] = wc();
, поэтому использование одного или другого кажется одинаковым...
РЕДАКТИРОВАТЬ
Что касается ваших ошибок, вы получили их, потому что $woocommerce->session
не был установлен. WC инициализирует WC_Session_Handler
только по интерфейсным или CRON-запросам. Выберите свой крючок действия соответствующим образом.