Woocommerce - когда выбран местный пикап (плюс), удалите все другие способы доставки - PullRequest
0 голосов
/ 07 сентября 2018

Woocommerce установка с плагином Local Pickup Plus. Продукт А должен быть поднят и установлен на «Должен быть поднят». Продукт B продается сам по себе, а также является синхронизированной принудительной продажей с продуктом A. Для него установлено значение «Может быть получено», а также доступна фиксированная доставка. Если продукт B приобретен один, клиенты могут выбрать доставку по фиксированной цене или по фиксированной ставке. Когда продукт B приобретается вместе с продуктом A, оба должны быть только для получения. Однако, когда продукт A и B находятся в корзине, отображаются два способа доставки - местный пикап для продукта A и фиксированная ставка для продукта B.

https://i.imgur.com/DYXMvW9.png

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

Это приводит к WSOD:

add_filter( 'woocommerce_package_rates', 'unset_wc_shipping_methods_when_cat', 10 ,2 );

function unset_wc_shipping_methods_when_cat ( $rates, $package ) {

$product_category = 'birth-pool-hire';

// loop through the cart
foreach ( $cart->get_cart() as $cart_item ) {
    if ( has_term( $product_category, 'product_cat', $cart_item['product_id'] ) )

    $local_pickup = $rates['local_pickup_plus'];
        $rates = array();
        $rates['local_pickup_plus'] = $local_pickup_plus;
    }


return $rates;

}

Это корректно удаляет фиксированную ставку, но вы больше не можете выбирать место получения (оба способа доставки отображаются как «Локальный сбор: 0,00 долл. США», а в главном способе доставки отсутствует поле выбора места получения. https://gist.github.com/rynaldos/9de09f00765c83868fb7fbd731c3aa1b

Я также попробовал здесь код, изменив local_pickup на local_pickup_plus, но это привело к исчезновению только поля местоположения пикапа - по-прежнему отображается единая ставка Shipping 2. Удалить метод единой ставки доставки для определенной категории в WooCommerce 2.6 и 3 +

Я попытался поиграться с другими вариантами, но у всех был один и тот же результат - не работал вообще или исчезло окно выбора местоположения местного пикапа.

Все, что мне нужно, это то, что если выбран местный пикап (плюс), никакие другие способы доставки не должны присутствовать / быть доступными. И клиенты по-прежнему должны иметь возможность выбрать предпочтительное место получения. Вырвал мои волосы на этом и заболел, чтобы загрузить, так что помощь очень ценится!

ОБНОВЛЕНИЕ: следующие наборы кода работают корректно, чтобы несколько отключить единовременную доставку, но все же позволяют локальный вывоз, включая выбор места вывоза.

/**
 * Hide shipping rates when local pickup is available.
 * Updated to support WooCommerce 2.6 Shipping Zones.
 *
 * @param array $rates Array of rates found for the package.
 * @return array
 */
function wc_hide_shipping_when_pickup_is_available( $rates ) {
$pickup = array();
foreach ( $rates as $rate_id => $rate ) {
    if ( 'local_pickup_plus' === $rate->method_id ) {
        $pickup[ $rate_id ] = $rate;
        break;
    }
}
return ! empty( $pickup ) ? $pickup : $rates;
}
add_filter( 'woocommerce_package_rates', 'wc_hide_shipping_when_pickup_is_available', 100 );

Изменено отсюда: https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/

function hide_shipping_method_based_on_shipping_class( $rates, $package )
{
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

// HERE define your shipping class to find
$class = 602;

// HERE define the shipping method to hide
$method_key_id = 'flat_rate:1';

// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item ){
    // If we find the shipping class
    if( $cart_item['data']->get_shipping_class_id() == $class ){
        unset($rates[$method_key_id]); // Remove the targeted method
        break; // Stop the loop
    }
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );

Изменено с: Скрыть способ доставки для определенных классов доставки в woocommerce

Я говорю несколько, однако, потому что Доставка 2 все еще остается. Вместо этого я получаю либо There are no shipping methods available. Please ensure that your address has been entered correctly, or contact us if you need any help., если адрес введен, либо Enter your full address to see shipping costs., если адрес еще не введен. Отгрузка 2 не должна появляться вообще, если на все товары в корзине наложен пикап.

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