WooCommerce удаляет способ доставки на основе идентификаторов продуктов и купленного количества

Я пытаюсь удалить способ доставки на основе двух параметров в моей корзине. Параметр 1 = идентификатор продукта Параметр 2 = добавленное количество для этого идентификатора продукта.

Я искал и комбинировал различные решения, однако использование приведенного ниже фрагмента по-прежнему не дает мне правильного результата. Ожидаемый результат будет заключаться в том, что если какой-либо из продуктов ( 6 , 9 , 69 , 71 ) будет добавлен в мою корзину 52 раза, плата за доставку (flexible_shipping_2_1) должна исчезнуть.

Все предложения будут оценены.

add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {

    $product_ids = array( 6 , 9, 69 , 71 ); // HERE set the product IDs in the array
    $method_id = 'flexible_shipping_2_1'; // HERE set the shipping method ID
    $found = false;
    

    // Loop through cart items Checking for defined product IDs
    foreach( WC()->cart->get_cart_contents() as $cart_item_key => $cart_item ) {
        if ( in_array( $cart_item['product_id'], $product_ids ) && $cart_item['quantity'] == 52){
            $found = true;
            break;
        }
    }
    if ( $found )
        unset( $rates[$method_id] );

    return $rates;
}

Привет, LoicTheAztec, спасибо за вашу поддержку и мудрость в этом вопросе, это действительно помогло мне.

Brecht Schoeters 29.12.2020 17:49
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
1
1
782
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, это то, что вы хотели бы (чтобы получить совокупное количество для всех определенных идентификаторов продуктов):

add_filter( 'woocommerce_package_rates', 'specific_products_shipping_methods', 10, 2 );
function specific_products_shipping_methods( $rates, $package ) {

    $product_ids = array( 6 , 9, 69 , 71 ); // HERE set the product IDs in the array
    $method_id   = 'flexible_shipping_2_1'; // HERE set the shipping method ID
    $quantity    = 0;
    

    // Get cart items for the current shipping package
    foreach( $package['contents'] as $cart_item ) {
        if ( in_array( $cart_item['product_id'], $product_ids ) ){
            $quantity += $cart_item['quantity'];
        }
    }
    
    if ( $quantity >= 52 && isset($rates[$method_id]) ) {
        unset($rates[$method_id]);
    }
        

    return $rates;
}

Не забудьте очистить корзину, чтобы обновить кешированные данные о доставке…

Проверено и НЕ работает. Пожалуйста обновите.

Dev 28.02.2023 16:24

Другие вопросы по теме