隐藏woocommerce中特定送货类的送货方式

Nik*_*ner 5 php wordpress shipping cart woocommerce

基本上我正在尝试使用具有运输类别"Roller"(ID )的购物车物品时flat_rate:7 禁用统一费率方法ID 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;
}
Run Code Online (Sandbox Code Playgroud)

发货类ID 92是发货类,我想隐藏flat_rate:7它.

我的网站是这样的:http://www.minimoto.me/ WordPress:4.8.4 WooCommerce:3.1.1

任何帮助将不胜感激.

Loi*_*tec 10

更新:您应该尝试这种更短,更紧凑和有效的方式:

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;
}
Run Code Online (Sandbox Code Playgroud)

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中.

经过测试和工作.

有时,您可能需要刷新运输方式,然后禁用/保存并重新启用/保存您的"统一费率"运输方式.

要查找送货方式ID和送货类ID,请参阅下文...


许多不同送货方式的更新(与您的评论相关):

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;
}
Run Code Online (Sandbox Code Playgroud)

经过测试和工作......


查找货运类ID.

1)在wp_terms表下的数据库中:

搜索术语名称或术语slug,您将获得术语ID(发货类ID).

2)在Woocommerce运输设置中,使用浏览器html检查工具编辑"统一费率",检查运费类别费率字段,如:

在此输入图像描述

在您的imput name属性中woocommerce_flat_rate_class_cost_64.所以64是发货类的ID.


获取送货方式费率ID:

要获取相关的送货方式费率ID,flat_rate:12请使用浏览器代码检查器检查每个相关的单选按钮属性,name例如:

在此输入图像描述