Удалить способ доставки на следующий день для товаров, которых нет в наличии в Woocommerce

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

Каждый товар в магазине доступен в течение 10-15 дней, но некоторые товары есть в наличии и доступны для доставки на следующий день. Если какой-либо из продуктов в корзине отсутствует на складе, должна быть доступна только стандартная доставка.

Я почти уверен, что мне нужно использовать фильтр woocommerce_available_shipping_methods, как показано в этом аналогичном вопросе / ответе здесь: Скрыть параметры доставки Woocommerce, однако я совершенно не понимаю, как проверить уровень запасов каждого товара в корзине.

Любые указатели будут очень признательны.


person user2980449    schedule 11.11.2013    source источник


Ответы (1)


Я разобрался с этой проблемой. Мое решение определенно подходит не всем, но может кому-то помочь.

Я использую этот плагин доставки для woocommerce: http://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656?WT (на случай, если вы хотите воспроизвести, как это работает)

Я в долгу перед ответом на этот вопрос: Скрыть параметры доставки Woocommerce

Код в основном скопирован из него, но настроен для проверки количества товара на складе.

Этот код НЕ принимает во внимание, разрешены ли отложенные заказы, он буквально проверяет, если количество на складе> 0, а количество в тележке ‹= количество на складе. Обычно, если товар есть на складе, доставка на следующий день возможна при оформлении заказа, если товар не удаляется, доступна только стандартная доставка.

/* !Hide Shipping Options Woocommerce */

add_filter( 'woocommerce_available_shipping_methods', 'hide_shipping_based_on_quantity' ,    10, 1 );

function check_cart_for_oos() {

// load the contents of the cart into an array.
global $woocommerce;
$found = false;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
    $_product = $values['data'];
    $_product_quantity = $_product->get_stock_quantity();
    $_cart_quantity = $values['quantity'];
    if (($_product_quantity <= 0) || ($_cart_quantity > $_product_quantity)) {
        $found = true;
        break;
    }
}
return $found;
}


function hide_shipping_based_on_quantity( $available_methods ) {

// use the function check_cart_for_oos() to check the cart for products with 0 stock.
if ( check_cart_for_oos() ) {

    // remove the rate you want
    unset( $available_methods['table_rate_shipping_next-day'] ); // Replace "table_rate_shipping_next-day" with "table_rate_shipping_your-identifier".
}

// return the available methods without the one you unset.
return $available_methods;
}
person user2980449    schedule 12.11.2013