КРИТИЧЕСКАЯ необработанная ошибка для функции hide_payment_gateways_based_on_weight

Хотя эта функция отлично работает во внешнем интерфейсе, на бэкэнде у меня есть:

CRITICAL Uncaught Error: Call to a member function get_cart_contents_weight() on null in........

Это функция.

add_filter( 'woocommerce_available_payment_gateways', 'hide_payment_gateways_based_on_weight', 10, 1 );
    function hide_payment_gateways_based_on_weight( $available_gateways ) { 
        if ( is_admin() ) 
            return $available_gateways; 
    
        $total_weight = WC()->cart->get_cart_contents_weight();
        if ( $total_weight >= 2000 && isset ($available_gateways['cod']) )
            
            unset($available_gateways['cod']); // unset 'cod'
            return $available_gateways;         
     }

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
2
0
46
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

$WC_Cart = new WC_Cart();
$total_weight  = $WC_Cart->get_cart_contents_weight();

Попробуйте набрать такой вес.

Проблема первого порядка заключается в том, что тележка в WC()->cart не определена/нуль. Вы должны проверить, определено ли это, прежде чем пытаться получить вес. Почему корзина имеет значение null — это проблема второго порядка, которую мы не можем определить с помощью этого фрагмента кода. Это может быть просто обычный неинициализированный случай или какая-то другая проблема.

Ответ принят как подходящий

Причина, по которой ваша функция выдает критическую ошибку администратору, заключается в том, что в WC Admin нет корзины. Использование is_admin() не работает в админке WC, поэтому ваше объявление $total_weight выдает ошибку.

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

Кроме того, чего бы это ни стоило... WPCS и PHPCS не любят встроенные элементы управления. Вы должны заключать операторы if в скобки для удобства чтения.

add_filter( 'woocommerce_available_payment_gateways', 'hide_payment_gateways_based_on_weight', 10, 1 );
function hide_payment_gateways_based_on_weight( $available_gateways ) {
    // Check if it's the cart page or the checkout.
    if ( is_cart() || is_checkout() ) {
        $total_weight = WC()->cart->get_cart_contents_weight();
        if ( 2000 >= $total_weight && isset( $available_gateways['cod'] ) ) {
            unset( $available_gateways['cod'] ); // unset 'cod'.
        }
    }
    return $available_gateways;
}

Вы правы, @howard-e теперь все работает без фатальных ошибок на бэкенде! большое спасибо!!!!

alexmac 23.04.2022 18:11

Другие вопросы по теме