Удалите дублирующиеся пакеты доставки, используя класс доставки в Woocommerce - PullRequest
0 голосов
/ 07 ноября 2018

Продукты на моем веб-сайте обрабатываются одним из этих двух плагинов для доставки: Интеграция с печатью для WooCommerce и Печать для WooCommerce Shipping . когда есть смешанные элементы из каждого плагина доставки. Эти плагины разделяют каждый пакет доставки на две части, когда есть смешанные элементы (что является конфликтом и проблемой) .

Итак, я добавил класс доставки 'printful' (с идентификатором 548) к продуктам, которые обрабатываются Плагин для печати и попытался настроить Скрыть способ доставки для определенных классов доставки в woocommerce код ответа от @LoicTheAzec (cheers), чтобы удалить метод доставки только из определенных дублированных пакетов доставки с идентификаторами 2 и 3 из-за конфликта между плагинами доставки…

enter image description here

Вот мой фактический код:

    add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
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 = 548; //CAMDEN HARBOR CHART MUG is in shipping class

    // HERE define the shipping methods you want to hide
    $method_key_ids = array('printify_shipping_s', 'printify_shipping_e');

    // 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 ){
            foreach( $method_key_ids as $method_key_id ){

                unset($rates[$method_key_id]); // Remove the targeted methods
            }
            break; // Stop the loop
        }
    }
    return $rates;
}

Но это не работает, и я все равно получаю 4 пакета доставки вместо двух:

enter image description here

Любая помощь приветствуется.

1 Ответ

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

Проблема здесь связана с конфликтом разделения пакетов между двумя вашими плагинами доставки, когда смешанные товары находятся в корзине. В этом случае каждый плагин разделяет пакет доставки, добавляя 4 сплит-пакета вместо 2.

Эти плагины используют woocommerce_cart_shipping_packages для разделения пакетов доставки с неизвестным приоритетом (so I will set a very high priority).

В следующем коде первые 2 сплит-пакета будут храниться в корзине (и при оформлении заказа):

add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages ) {
    $has_printful = $has_printify = false; // Initializing

    // Lopp through cart items
    foreach( WC()->cart->get_cart() as $item ){
        // Check items for shipping class "printful"
        if( $item['data']->get_shipping_class() === 'printful' ){
            $has_printful = true;
        } else {
            $has_printify = true;
        }
    }

    // When cart items are mixed (using both shipping plugins)
    if( $has_printful && $has_printify ){
        // Loop through split shipping packages
        foreach( $packages as $key => $package ) {
            // Keeping only the 2 first split shipping packages
            if( $key >= 2 ){
                // Removing other split shipping packages
                unset($packages[$key]);
            }
        }
    }

    return $packages;
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Он должен работать и отображать только две упаковки, когда элементы корзины смешаны.

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