retailcrm / woocommerce-module

WooCommerce integration plugin
https://www.simla.com
MIT License
7 stars 29 forks source link

Call to a member function get_cart() on null при смене статуса заказа из админки #281

Closed yunusga closed 1 year ago

yunusga commented 2 years ago

После обновления плагина с 4.4.4 до версии 4.4.5 для WooCommerce при смене статуса заказа выскакивает ошибка:

PHP Fatal error:  Uncaught Error: Call to a member function get_cart() on null

Откат до 4.4.4 исправляет проблему.

Лог ошибки

PHP Fatal error:  Uncaught Error: Call to a member function get_cart() on null in wp-content\plugins\woocommerce\includes\class-wc-tax.php:583
Stack trace:
#0 wp-content\plugins\woo-retailcrm\include\functions.php(160): WC_Tax::get_shipping_tax_rates()
#1 wp-content\plugins\woo-retailcrm\include\class-wc-retailcrm-orders.php(382): getShippingRates()
#2 wp-content\plugins\woo-retailcrm\include\class-wc-retailcrm-orders.php(268): WC_Retailcrm_Orders->processOrder()
#3 wp-content\plugins\woo-retailcrm\include\class-wc-retailcrm-base.php(374): WC_Retailcrm_Orders->updateOrder()
#4 wp-includes\class-wp-hook.php(309): WC_Retailcrm_Base->update_order()
#5 in wp-content\plugins\woocommerce\includes\class-wc-tax.php on line 583

Данные сайта

Версия WooCommerce: 6.7.0
WooCommerce Simla.com: 4.4.5
Версия WordPress: 6.0.1
PHP версии: 7.4.21
uryvskiy-dima commented 2 years ago

Добрый день, вы в WooCommerce не используете налоги ? Ошибку исправили, но исправление появится в МП с версией 4.4.6.

Если вы планируете использовать версию 4.4.5, вы можете добавить проверку тут или подождать обновления 4.4.6.

yunusga commented 2 years ago

Налоги считаются при передаче чека заказа, а в остальном нет, налоги не настроены на сайтах. Проверку временно добавлю.

@dima-uryvskiy Спасибо за оперативность!

yunusga commented 2 years ago

Баг воспроизводится в версиях 4.4.6, 4.4.7

Отладка и поиски по интернету показали:

  1. Включить налоговые ставки и расчёты
  2. В вкладке Налог в параметре Класс налога на доставку указать Рассчитывается на основе товаров в корзине - inherit (установлено по умолчанию)
  3. woocommerce/includes/class-wc-tax.php#L561 и woocommerce/includes/class-wc-tax.php#L571 пропустят эти условия и попытаются получить данные из товаров в корзине, а внутри админки не загружается класс Корзины

Как следствие мы имеем PHP Fatal error: Uncaught Error: Call to a member function get_cart() on null in wp-content\plugins\woocommerce\includes\class-wc-tax.php:583

Почему не загружается класс Корзины для админки

Предполагаемое решение

При Классе налога на доставку с значением Рассчитывается на основе товаров в корзине получать данные непосредственно из позиций в заказе т.к. они хранятся именно внутри заказа.

yunusga commented 2 years ago

Ещё из лога забыл добавить при успешной смене статуса заказа появляется PHP Notice: Undefined index: type in woo-retailcrm\include\class-wc-retailcrm-orders.php on line 451

Возможно это предупреждение зависит от работы конкретно моего сайта.

uryvskiy-dima commented 2 years ago

Добрый вечер, завтра займусь исправлением этой ошибки, спасибо за подробное описание ошибки и предложенное решение.

uryvskiy-dima commented 2 years ago

PR # 286

uryvskiy-dima commented 1 year ago

Добрый день, вопрос актуален ?