Intereting Posts
Игнорирование исходных статей (например, «a», «an» или «the») при сортировке запросов? Признание изменения размера экрана PHP-код для использования в следующих и предыдущих ссылках Условия категории «Sitewide» Некоторые ссылки продолжают перенаправляться в другой домен Создайте новую папку и загрузите файлы в пользовательскую папку через wp_handle_upload Разбивка страниц – публикация содержимого первой страницы Внешняя страница, встроенная в WordPress, возвращает ошибку 404 Как вы можете обернуть add_filter с помощью инструкции if_home ()? add_cap для редактора, но не роль администратора admin-ajax.php возвращает 0. Как его отладить и исправить? межсетевой бенчмаркинг с wordpress Отзывчивые изображения – урожай не работает Могут ли короткие коды содержать условные утверждения? Даже без них мой shortcode отображает пустую страницу Разрешить только роль администратора для доступа к странице настроек / параметров плагина

Отключить woocommerce кнопку PLACE ORDER, если пользователь выбрал продукты, недоступные для международной доставки

На моем сайте woocommerce я перечисляю оба продукта, которые доступны для доставки в Индию, а также в международные пункты назначения. Я назначаю only-india класс доставки для определенных продуктов, чтобы отметить их как доступные только для Индии.

Теперь я пытаюсь добавить валидацию на странице Checkout, чтобы пользователи не могли выполнить заказ, если они выбрали международный пункт назначения, но имеющие в своей корзине only-india товары из одной страны, а также международные продукты.

То, что я пробовал до сих пор, заключается в следующем:

 add_action('woocommerce_checkout_order_review', 'abc_validating_international_delivery'); add_action('woocommerce_update_order_review', 'abc_validating_international_delivery'); function abc_validating_international_delivery(){ $has_local_products = false; $post_data = $_POST['post_data']; parse_str( $post_data, $abc_array ); if( isset($abc_array['ship_to_different_address']) ) $shipping_country = $abc_array['shipping_country']; else $shipping_country = $abc_array['billing_country']; if( !empty( $shipping_country ) ) { foreach ( WC()->cart->cart_contents as $cart_content_product ) { $shipping_class = $cart_content_product['data']->get_shipping_class(); if($shipping_class == 'only-india') { $has_local_products = true; } } if( $has_local_products && $shipping_country != 'IN' ) { wc_add_notice( sprintf( '<strong>You have added some products into your cart, which will not be delivered outside India!<br>Please visit <a href="https://www.example.com/my-account/">My Account</a> page and update the shipping/billing location or <a href="https://www.example.com/cart/">review the products</a> you added in cart!</strong>' ), 'error' ); return false; } else return true; } } 

Он работает в первый раз при доступе к странице Checkout и нажатии кнопки «Разместить заказ». Я имею в виду, предположим, что я добавил в свою корзину 3 международных доставки товаров и 1 only-india продукт в моей корзине, и когда я выбираю иностранную страну (скажем, US ) и нажимает кнопку «Заказать место», он будет показывать уведомление (иногда это показывая более двух повторяющихся уведомлений). Но если я не сделаю никаких изменений и снова нажмите кнопку «Разместить заказ», это просто приведет меня на страницу платежного шлюза. Я имею в виду, что похоже, что это не делает проверку и не останавливает меня от завершения заказа!

Любые предложения по улучшению кода? Пожалуйста, не стесняйтесь спрашивать, нужны ли вам какие-либо разъяснения или объяснения.

спасибо

Solutions Collecting From Web of "Отключить woocommerce кнопку PLACE ORDER, если пользователь выбрал продукты, недоступные для международной доставки"

Так как у меня нет отличного ответа для вас после проверки логики выше (кажется, все в порядке) .. что-то еще я заметил.

 add_action('woocommerce_update_order_review' ... 

Вы используете последнее обновление? Я не вижу ссылки здесь docs.woothemes.com/wc-apidocs/hook-docs.html или на github depo для этого do_action.

Вот текущий макет для крючков / фильтров на form-checkout.php .. Вы уверены, что используете правильное add_action? (Woocommerce имеет ужасную документацию, если вы заметили). Вы хотите, чтобы он также был подтвержден для ваших дополнительных условий (класс отгрузки / страна доставки) после того, как они представили «проверку проверки», правильно? (И отклоните с сообщением в этой точке, если необходимо). Значение: что, если они обновляют доставку на странице проверки (новые отправленные значения доставки)?

Еще одна идея – запретить добавление в корзину, если условия доставки совпадут. (Удалите кнопку «Добавить в корзину» и замените ее коротким сообщением: «Только для Индии» и т. Д.), Что позволяет избежать попадания в корзину на первом месте. Или оставьте кнопку и нажмите msg, когда они нажмут на нее. (очевидно, что любой из этих вариантов будет работать, только если они уже ввели информацию о доставке ранее).

Надеюсь, это немного поможет.