php 如何检查woocommerce购物车中的产品数量

34gzjxbg  于 2023-01-12  发布在  PHP
关注(0)|答案(2)|浏览(192)

代码检查发运分类是否等于标识53,并隐藏发运方法。问题在于:如果有人添加了一个以上的产品,代码检查只在最后添加的项目。我想它先计算所有添加的产品,如果有超过2个产品具有相同的航运类,那么它将隐藏“包储物柜”航运方法请帮助

`add_filter( 'woocommerce_package_rates', 'fanka_kodowania_hide_shipping_method1', 10, 2 );

function fanka_kodowania_hide_shipping_method1( $rates, $package )
{
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    /*****************KLASA WYSYŁKI**************************/
    $class1 = 53;
    /********************************************************/

    /*****************METODY WYSYŁKI*************************/
    $method_key_ids = array('inpost_paczkomaty:12');
    /********************************************************/

    global $woocommerce; 

    foreach ( WC()->cart->get_cart() as $cart_item ) {
        
        $item = $cart_item['data'];

        if(!empty($item)) {
            $quantity = $cart_item['quantity'];
                
        }
    }


    foreach( $package['contents'] as $item ) {

        if( $item['data']->get_shipping_class_id() == $class1 && $quantity >1 ){
            foreach( $method_key_ids as $method_key_id ){
                unset($rates[$method_key_id]);
            }
        }
    }
    return $rates;
}
`
guykilcj

guykilcj1#

在确定是否应隐藏配送方式时,此检查将检查购物车中的最后一个项目。
添加数量检查:

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

function fanka_kodowania_hide_shipping_method1( $rates, $package )
{
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Shipping class to check for
    $class1 = 53;

    // Shipping method to hide
    $method_key_ids = array('inpost_paczkomaty:12');

    // Keep track of the quantity of items with the specified shipping class
    $quantity = 0;

    foreach( $package['contents'] as $item ) {
        if( $item['data']->get_shipping_class_id() == $class1 ){
            $quantity += $item['quantity'];
        }
    }

    // If there are more than two items with the specified shipping class, hide the shipping method
    if( $quantity > 1 ) {
        foreach( $method_key_ids as $method_key_id ){
            unset($rates[$method_key_id]);
        }
    }

    return $rates;
}
lskq00tm

lskq00tm2#

此代码的问题在于,它只检查添加到购物车的最后一个项目的数量,而不检查发运分类ID为53的项目的总数量。要解决此问题,您可以添加一个变量来跟踪具有该发运分类ID的项目的总数量,然后在末尾检查该变量的值,以确定是否隐藏发运方法。

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

function fanka_kodowania_hide_shipping_method1( $rates, $package )
{
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    /*****************KLASA WYSYŁKI**************************/
    $class1 = 53;
    /********************************************************/

    /*****************METODY WYSYŁKI*************************/
    $method_key_ids = array('inpost_paczkomaty:12');
    /********************************************************/

    //create variable to keep track of total quantity of items with class1
    $total_quantity = 0;

    foreach( $package['contents'] as $item ) {
        if( $item['data']->get_shipping_class_id() == $class1 ){
            $total_quantity += $item['quantity'];
        }
    }

    //check if total quantity is greater than 1 
    if( $total_quantity > 1 ){
        foreach( $method_key_ids as $method_key_id ){
            unset($rates[$method_key_id]);
        }
    }
    return $rates;
}

这将遍历购物车中的项目,对于发运分类标识为53的每个项目,它将把该项目的数量添加到total_quantity变量中。遍历所有项目后,它将检查总数量是否大于1,如果大于1,它将从可用选项中删除指定的发运方法。
祝你好运!

相关问题