php WooCommerce में विशिष्ट शिपिंग वर्ग के लिए शिपिंग विधियों को छुपाएं




wordpress cart (2)

मूल रूप से मैं फ्लैट रेट विधि बनाने की कोशिश कर रहा हूं आईडी flat_rate:7 अक्षम है जब कार्ट आइटम हैं जिसमें शिपिंग क्लास "रोलर" (आईडी 92 ) है।

यह वह कोड है जिसे मैंने आज़माया है:

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

function wf_hide_shipping_method_based_on_shipping_class($available_shipping_methods, $package)
{
    $hide_when_shipping_class_exist = array(
        92 => array(
            'flat_rate:7'
        )
    );

    $shipping_class_in_cart = array();
    foreach(WC()->cart->cart_contents as $key => $values) {
       $shipping_class_in_cart[] = $values['data']->get_shipping_class_id();
    }

    foreach($hide_when_shipping_class_exist as $class_id => $methods) {
        if(in_array($class_id, $shipping_class_in_cart)){
            foreach($methods as & $current_method) {
                unset($available_shipping_methods[$current_method]);
            }
        }
    }

    return $available_shipping_methods;
}

शिपिंग क्लास ID 92 शिपिंग क्लास है और मैं इसके लिए flat_rate:7 को छिपाना चाहता हूं।

मेरी साइट यह है: http://www.minimoto.me/ WordPress: 4.8.4 WooCommerce: 3.1.1

किसी भी प्रकार की सहायता सराहनीय होगी।


LoicTheAztec के कोड (चीयर्स) को ट्विक करके, मैं एक पूरे के रूप में कार्ट के बजाय इसकी सामग्री के शिपिंग वर्ग के आधार पर प्रत्येक पैकेज के लिए एक शिपिंग विधि को अनसेट करने में सक्षम था। शायद यह किसी और की भी मदद करेगा:

// UNSET A SHIPPING METHOD FOR PACKAGE BASED ON THE SHIPPING CLASS(es) OF ITS CONTENTS
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;
    }

    foreach( $package['contents'] as $package_item ){ // Look at the shipping class of each item in package

        $product_id = $package_item['product_id']; // Grab product_id
        $_product   = wc_get_product( $product_id ); // Get product info using that id

        if( $_product->get_shipping_class_id() != 371 ){ // If we DON'T find this shipping class ID
            unset($rates['wbs:9:dae98e94_free_ups_ground']); // Then remove this shipping method
            break; // Stop the loop, since we've already removed the shipping method from this package
        }
    }
    return $rates;
}

यह कोड मुझे मेरे 'फ्री यूपीएस ग्राउंड' शिपिंग को अनसेट करने की अनुमति देता है अगर पैकेज में कुछ भी हो लेकिन 'स्टैंडर्ड' आइटम (मेरे मामले में शिपिंग_क्लास_id 371)।

मूल पोस्ट से परिदृश्य (अक्षम विधि x अगर शिपिंग वर्ग y ) इस तरह से काम करेगा:

// UNSET A SHIPPING METHOD FOR PACKAGE BASED ON THE SHIPPING CLASS(es) OF ITS CONTENTS
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;
    }

    foreach( $package['contents'] as $package_item ){ // Look at the shipping class of each item in package

        $product_id = $package_item['product_id']; // Grab product_id
        $_product   = wc_get_product( $product_id ); // Get product info using that id

        if( $_product->get_shipping_class_id() == 92 ){ // If we DO find this shipping class ID
            unset($rates['flat_rate:7']); // Then remove this shipping method
            break; // Stop the loop, since we've already removed the shipping method from this package
        }
    }
    return $rates;
}

अपडेट 2019: आपको इसके बजाय कम, कॉम्पैक्ट और प्रभावी तरीके से प्रयास करना चाहिए:

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 = 92;

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

    // Checking in cart items
    foreach( $package['contents'] as $item ){
        // If we find the shipping class
        if( $item['data']->get_shipping_class_id() == $class ){
            unset($rates[$method_key_id]); // Remove the targeted method
            break; // Stop the loop
        }
    }
    return $rates;
}

कोड आपके सक्रिय चाइल्ड थीम (या थीम) या किसी भी प्लगइन फाइल में भी काम करता है।

परीक्षण किया और काम करता है।

कभी-कभी, आपको शिपिंग क्षेत्रों में जाने वाले शिपिंग तरीकों को ताज़ा करने की आवश्यकता हो सकती है, फिर अपने शिपिंग दरों को "फ्लैट दरों" को अक्षम / सहेजें और पुनः सक्षम करें / सहेजें।

संबंधित: WooCommerce में विशिष्ट शिपिंग कक्षाओं के लिए शिपिंग विधियों को छुपाएं

शिपिंग विधियों को खोजने के लिए आईडी और शिपिंग क्लासेस आईडी नीचे देखें ...

कई अलग-अलग शिपिंग तरीकों के लिए अपडेट (अपनी टिप्पणियों से संबंधित):

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 = 92;

    // HERE define the shipping methods you want to hide
    $method_key_ids = array('flat_rate:7', 'local_pickup:3');

    // Checking in cart items
    foreach( $package['contents'] as $item ) {
        // If we find the shipping class
        if( $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;
}

परीक्षण और काम करता है ...

शिपिंग क्लास आईडी ढूंढना।

1) डेटाबेस में wp_terms तालिका के तहत:

एक टर्म नाम या एक टर्म स्लग के लिए खोजें और आपको टर्म आईडी (शिपिंग क्लास आईडी) मिल जाएगी।

2) अपने ब्राउज़र HTML इंस्पेक्टर टूल के साथ "समतल दर" का संपादन करने वाले Woocommerce शिपिंग सेटिंग्स पर, एक शिपिंग क्लास इंस्पेक्टर क्षेत्र का निरीक्षण करें:

Imput नाम विशेषता में आपके पास woocommerce_flat_rate_class_cost_64 । तो 64 शिपिंग क्लास के लिए आईडी है।

शिपिंग विधि दर आईडी प्राप्त करें:

संबंधित शिपिंग विधियों की दर आईडी प्राप्त करने के लिए, flat_rate:12 जैसी flat_rate:12 चीज़, अपने ब्राउज़र कोड निरीक्षक के साथ प्रत्येक संबंधित रेडियो बटन विशेषता का निरीक्षण करें: