根据Woocommerce中的购物车物品类别更改运输类别

问题描述 投票:2回答:1

我在使用默认的WooCommerce运输类设置时遇到问题。我们有一个小型网上商店,有2个运费。一种适用于邮箱的产品,另一种不适用于邮箱。

我们想设置一个设置,如果有2个产品与邮箱运输类,价格成为包价格。

现在默认情况下,WooCommerce只收取邮箱发货类的1倍费用。

php wordpress woocommerce cart shipping-method
1个回答
2
投票

首先,您需要按照下面的屏幕进行发货设置,对于“统一费率”送货方式,只需要一个名为“邮箱”的送货类(为“邮箱”设置所需的金额或没有送货类别):

enter image description here

因此,您的某些产品将具有“邮箱”运输类,而所有其他产品都没有运输类。没有发货类别(没有发货类)的产品将是您的“包裹。

如果有多个带有“邮箱”运输类的商品,以下代码将删除购物车商品运送类:

// Updating cart item price
add_action( 'woocommerce_before_calculate_totals', 'change_change_shipping_class', 30, 1 );
function change_change_shipping_class( $cart ) {
    if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // HERE define your shipping class SLUG
    $mailbox_shipping_class = 'mailbox';

    $mailbox_count = 0;

    // 1st cart item Loop: Counting "mailbox" shipping classes cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // Set the new price
        if( $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ) {
            $mailbox_count += $cart_item['quantity'];
        }
    }

    // If there is more than one item we continue
    if( $mailbox_count <= 1 )
        return; // Exit

    // 2nd cart item Loop: Reset the cart items with shipping class "mailbox"
    foreach ( $cart->get_cart() as $cart_item ) {
        if(  $cart_item['data']->get_shipping_class() == $mailbox_shipping_class ){
            $cart_item['data']->set_shipping_class_id('0');
        }
    }
}

代码位于活动子主题(或活动主题)的function.php文件中。经过测试和工作。

© www.soinside.com 2019 - 2024. All rights reserved.