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