У меня уже есть несколько различных уроков по включению и отключению методов оплаты в WooCommerce в зависимости от некоторых условий, например:
Сегодня рассмотрим ещё более частный случай – будем отключать методы оплаты, если среди товаров в корзине есть товары (хотя бы один) из определённой категории.
add_filter( 'woocommerce_available_payment_gateways', 'truemisha_gateway_by_category', 25 ); function truemisha_gateway_by_category( $available_gateways ) { // в админке лучше ничего не делать if ( is_admin() ) { return $available_gateways; } $gateway_slug = 'paypal'; // ярлык метода оплаты, в данном случае – палка $is_available = true; // включен или выключен? по умолчанию – включен $cat_ids = array( 5, 10 ); // ID категорий товаров, для которых отключаем // цикл для содержимого корзины foreach ( WC()->cart->get_cart_contents() as $key => $value ) { // получаем все категории данного товара из корзины if( $product_cats = get_the_terms( $value[ 'product_id' ], 'product_cat' ) ) { foreach ( $product_cats as $product_cat ) { if ( in_array( $product_cat->term_id, $cat_ids ) ) { $is_available = false; // товар из заданной категории, отключаем метод оплаты break 2; } } } } // отключаем метод оплаты if ( false === $is_available ){ unset( $available_gateways[ $gateway_slug ] ); } return $available_gateways; // возвращаем результат }
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
День добрый, Михаил!
Подскажите, а как мне сделать исключение способа оплаты по скрытому атрибуту!
Например:
товар с атрибутом " оплата только наличные" - отключить способ оплаты банковской карточкой!
Добрый день!
Можете получить атрибут вот так:
$onlycash = $product->get_attribute( 'onlycash' );
.Михаил, огромное спасибо. 🙏
Долго искал именно это решение, нужно было для определённой категории продуктов убрать оплату при получении. Всё сделал как написано. Всё работает! 👍✌️🤝
Спасибо.
П.С. Вижу уже не первый Ваш пост - Спасибо! 🤝🤝🤝
Очень рад! 🔥⚡️🌪
Михаил, огромное вам спасибо. Уже не первый раз использую ваши решения.
Вот и сейчас, отключила оплату при получении для определенных категорий товара.
Все работает!!!
Это прекрасно, пожалуйста! :)
Инетесное решение,
А подскажите как отключить все оплаты кроме наличных, при выборе в товаре атрибута?
А то не совсем разобрался, Спасибо
Ну вам получается нужно проверить, что определённая вариация вариативного товара находится в корзине.
Это можно сделать примерно так:
Подробнее тут.
А как узнать ярлыки методов оплаты, у меня из несколько (и киви и yandex) а надо для одной категории оставить только плату после подтверждения)
Вроде понял, что за ярлыки, но не понял, как заблокировать несколько методов сразу! Просто проблировать код - не вариант, сайт ломается.
Если сразу, то указываем несколько :
А куда этот код?, у вас скрывается так и unset нигде не фигурирует
$gateway_slug = 'paypal'; // ярлык метода оплаты, в данном случае – палка
Ну в уроке я записал ярлык в переменную (для наглядности), а в комментарии выше я показал, как сразу его использовать без выноса в отдельную переменную.
Так что этот код можно вообще убрать.
Добрый день, Михаил.
Я попытался на основе этого фрагмента отключить метод оплаты "Оплата наличными курьеру при получении" для определенных товаров - с меткой 'pp_only'. При попытке размещения кода в functions.php - появляются ошибки на странице оформления заказа. При помещении кода в payment.php ничего не происходит, как выводились все методы оплаты, так и выводятся. Что я делаю не так?
Заранее спасибо
Добрый день,
Замените пожалуйста на
$cat_ids = array( 'pp_only' );
и проверьте, исчезнут ли ошибки после этого.Здравствуйте, Михаил.
Подскажите, пожалуйста, что я делаю не так. У меня два эквайринга и каждый эквайринг для своей категории. Я сделал так(продублировал код и изменил немного:
Вроде все скрывается в нужных категориях, но в логах ошибка в первом блоке на строке
Ошибка такого плана
Как можно исправить? Спасибо.