Избегайте проверки для определенных продуктов в конкретной стране в Woocommerce - PullRequest
0 голосов
/ 17 ноября 2018

Вот что я хочу сделать:
Если клиент выбирает Канаду в качестве страны доставки, и в корзине есть определенный товар, оформление заказа не должно происходить, и должно появиться сообщение об ошибке, информирующее клиента о том, почему оформление заказа не произошло.не бывает

Мое исследование:
Добавление или удаление сообщений об ошибках woocommerce имеет код для генерации сообщений об ошибках WooCommerce.Вчера я задал вопрос, который дал мне коды, чтобы проверить, есть ли определенный товар в корзине и установлена ​​ли страна доставки Канада Удалить Канаду из списка стран, когда определенные товары находятся в корзине на Woocommerce Я не уверен, какой фильтр/ action Я должен подключить свой код, чтобы он запускался всякий раз, когда на странице оформления заказа нажимается «Разместить заказ».

Обновление: Поэтому я попытался объединить два кода, которые я перечислил в моем исследовании , но это не сработало.Любая помощь, если мне нужно подходить к этому по-другому, будет очень признательна
Идентификаторы продукта: 15631 и 12616

1 Ответ

0 голосов
/ 17 ноября 2018

Это можно сделать с помощью ловушки действий woocommerce_check_cart_items с помощью этой пользовательской функции:

add_action( 'woocommerce_check_cart_items', 'products_not_shipable_in_canada' );
function products_not_shipable_in_canada() {
    // Only on checkout page (allowing customer to change the country in cart shipping calculator)
    if( ! is_checkout() ) return;

    // Set your products
    $products = array(15631, 12616);

    // Get customer country
    $country = WC()->session->get('customer')['shipping_country'];
    if( empty($country) ){
        $country = WC()->session->get('customer')['billing_country'];
    }
    // For CANADA
    if( $country == 'CA' ){
        // Loop through cart items
        foreach( WC()->cart->get_cart() as $item ){
            // IF product is in cart
            if( in_array( $item['product_id'], $products ) ){
                // Avoid checkout and display an error notice
                wc_add_notice( sprintf( 
                    __("The product %s can't be shipped to Canada, sorry.", "woocommerce" ),  
                    '"' . $item['data']->get_name() . '"'
                ), 'error' );
                break; // Stop the loop
            }
        }
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

enter image description here

Связанный: Установить минимально допустимый вес для конкретной страны в WooCommerce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...