Intereting Posts
Делайте персонализированные типы сообщений и страницы удобными, re: rewrite Может загружаться через FTP, но не через загрузчик WP Экран комментариев в бэкэнд, как отключить Quick Edit | Редактировать | История | Спам | для не админов Запрос, заданный с использованием tax_query с отношением 'OR', изменяет объект категории? Можно ли получить сообщения в зависимости от условия мета-ключа LIKE? удалить термин из пользовательского списка таксономии Как удалить флажок для выделения в разделе «Параметры экрана» Правильно настроить 301 переадресацию для удаленных тегов При переадресации имени на другую домашнюю страницу, если пользователь использует мобильный телефон Пользовательская таблица стилей вместо встроенного CSS для переопределения API-интерфейса WordPress Невозможно изменить информацию о заголовке Ошибка при обновлении профиля пользователя как дезинфицировать флажок? Разбиение на страницы с пользовательским запросом (не используя сообщения) wp_insert_post не возвращает идентификатор сообщения? Рекомендации по добавлению статических страниц

Программно изменить способы оплаты WooCommerce

Я пытаюсь программным образом манипулировать выбором Способа оплаты между BACS и необязательным вариантом оплаты. Мой клиент хочет получить возможность запроса только по запросу, поэтому я расширил действия и фильтры woocommerce и предоставил метод запроса котировки через систему корзины. Если пользователь запросил только котировку, на странице проверки я пытаюсь автоматически выбрать вариант «Наличные деньги», который я переименовал в «Запрос только для котировки – без оплаты». Любые советы будут полезны.

Theres фильтр под названием woocommerce_available_payment_gateways:

add_filter('woocommerce_available_payment_gateways','filter_gateways',1); function filter_gateways($gateways){ global $woocommerce; //Remove a specific payment option unset($gateways['paypal']); return $gateways } 

Я не уверен, где и как вы получаете / сохраняете опцию «Запрос котировки», но вы можете получить доступ к значению внутри функции filter_gateways, и вы можете удалить определенный шлюз с условной логикой.

Моя проблема заключалась в использовании запросов vars для хранения значения, указывающего, что запрос предназначен только для цитаты. Область оплаты динамически обновляется в зависимости от изменений внутри областей проверки и при загрузке, способы оплаты перезагружаются, а значения запроса var теряются. Мне удалось преодолеть эту проблему, используя функции WC () -> session-> и WC () -> session-> get. Я добавил следующие два действия для управления макетом на основе значения сеанса.

 add_action("woocommerce_before_checkout_form", "custom_before_checkout_action"); function custom_before_checkout_action() { if (isset($_GET["quote"]) && $_GET["quote"] == "1") { echo '<h2>Request for Quote</h2>'; WC()->session->set("quote","true"); } else { WC()->session->set("quote","false"); echo '<h2>Buy Sample</h2>'; } } add_filter('woocommerce_available_payment_gateways','filter_gateways',1); function filter_gateways($gateways){ if (WC()->session->get("quote") == "true") unset($gateways['bacs']); else unset($gateways['cod']); return $gateways; } не add_action("woocommerce_before_checkout_form", "custom_before_checkout_action"); function custom_before_checkout_action() { if (isset($_GET["quote"]) && $_GET["quote"] == "1") { echo '<h2>Request for Quote</h2>'; WC()->session->set("quote","true"); } else { WC()->session->set("quote","false"); echo '<h2>Buy Sample</h2>'; } } add_filter('woocommerce_available_payment_gateways','filter_gateways',1); function filter_gateways($gateways){ if (WC()->session->get("quote") == "true") unset($gateways['bacs']); else unset($gateways['cod']); return $gateways; } не add_action("woocommerce_before_checkout_form", "custom_before_checkout_action"); function custom_before_checkout_action() { if (isset($_GET["quote"]) && $_GET["quote"] == "1") { echo '<h2>Request for Quote</h2>'; WC()->session->set("quote","true"); } else { WC()->session->set("quote","false"); echo '<h2>Buy Sample</h2>'; } } add_filter('woocommerce_available_payment_gateways','filter_gateways',1); function filter_gateways($gateways){ if (WC()->session->get("quote") == "true") unset($gateways['bacs']); else unset($gateways['cod']); return $gateways; } 

Это похоже на трюк, чтобы сохранить значение, и добавить условную логику даже после перезагрузки области оплаты.