繁体   English   中英

根据Woocommerce产品类别和用户所在国家/地区添加额外费用

[英]Add extra fee based on Woocommerce product categories and user country

我需要根据类别和国家/地区添加额外的费用! 该代码在国家和单个类别下运行良好,但是我无法为其他类别添加例外。

  1. 我的目标是为类别为(1,2,3)的30欧元的中型包装额外收费,为类别为(4,5,6)的50欧元的大包装额外收费,均适用于欧洲国家/地区。
  2. 类别为(1,2,3,4,5,6)的义大利额外费用€10

这是我的代码:

function df_add_ticket_surcharge_large( $cart_object ) {
global $woocommerce;

$specialfeecat = 1; // category id for the special fee
$spfee = 0.00; // initialize special fee
$spfeeperprod = 50; //special fee per product
$county = array('BE','EL','LT','PT','BG','ES','LU','RO','CZ','FR','HU','SI','DK','HR','MT','SK','DE','NL','FI','EE','CY','AT','SE','IE','LV','PL','UK');

foreach ( $cart_object->cart_contents as $key => $value ) {
    $proid = $value['product_id']; //get the product id from cart
    $quantiy = $value['quantity']; //get quantity from cart
    $itmprice = $value['data']->price; //get product price

    $terms = get_the_terms( $proid, 'article-type' ); //get taxonamy of the prducts
    if ( $terms && ! is_wp_error( $terms )) :
        foreach ( $terms as $term ) {
            $catid = $term->term_id;
            if($specialfeecat == $catid ) {
                $spfee = $spfeeperprod;
            }
        }
endif;  
}

if ( in_array( $woocommerce->customer->get_shipping_country(), $county ) ) {
    $woocommerce->cart->add_fee( 'Large Pack', $spfee, true, 'standard' );
    }
  }add_action('woocommerce_cart_calculate_fees','df_add_ticket_surcharge_large');

有人可以帮我吗?

以下代码将根据特定国家和产品类别组添加累进式购物车费用:

add_action('woocommerce_cart_calculate_fees', 'conditional_packing_fee', 20, 1 );
function conditional_packing_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    // HERE the valid countries (including 'IT'):
    $valid_countries = array('BE','EL','LT','PT','BG','ES','LU','RO','CZ','FR','HU','SI','DK','HR',
    'MT','SK','DE','NL','FI','EE','CY','AT','SE','IE','LV','PL','UK','IT');
    $user_country = WC()->customer->get_shipping_country(); // Get the user shipping country

    if( ! in_array($user_country, $valid_countries) ) return; // Not a valid country, we EXIT

    // HERE your product categories groups:
    $product_cat1 = array(1,2,3,4,5,6); // Group 1 ==> cost 10
    $product_cat2 = array(4,5,6); // Group 2 ==> cost 30
    $product_cat3 = array(1,2,3); // Group 3 ==> cost 50

    $found1 = $found2 = $found3 = false;
    $fee = 0;

    foreach ( $cart->get_cart() as $cart_item ) {
        // Group 1 case
        if( has_term( $product_cat1, 'product_cat', $cart_item['product_id'] ) && 'IT' == $user_country ){
            $found1 = true;
            $break; // We can stop the loop for Italy (if found)
        } 
        // Group 2 case
        elseif( has_term( $product_cat2, 'product_cat', $cart_item['product_id'] ) && 'IT' != $user_country ){
            $found2 = true;
        } 
        // Group 3 case
        elseif( has_term( $product_cat3, 'product_cat', $cart_item['product_id'] ) && 'IT' != $user_country ){
            $found3 = true;
        }
    }
    if( $found1 ){
        $fee = 10; // Italy
        $label = __('Packing fee', 'woocommerce');
    } else {
        if( $found3 ){
            $fee = 50; // Large packs (can have medium packs too)
            $label = __('Large packs', 'woocommerce');
        } elseif( $found2 && ! $found3 ){
            $fee = 30; // Medium packs (only)
            $label = __('Large packs', 'woocommerce');
        }
    }

    if ( $fee > 0 )
        $cart->add_fee( $label, $fee, true, 'standard' );
}

代码进入您的活动子主题(或活动主题)的function.php文件中。 它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM