douquejituan938904 2018-07-10 22:04
浏览 71
已采纳

基于Woocommerce中的州和产品类别的累进购物车项目费用

Recently I tryied to use 2 sniped codes in one for this Woocommerce project where I need to set a fee for a specific product category (term ID: 19) and and a specific country state (Florida 'FL')

Additionally I should need to multiply this fee rate by the items from this product category (19).

This is my actual code:

add_action('woocommerce_cart_calculate_fees','woocommerce_custom_surcharge'); 
function woocommerce_custom_surcharge() {
    $category_ID = '19'; 

    global $woocommerce;


    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $state  = array('FL');


    foreach ($woocommerce->cart->cart_contents as $key => $values ) {
    // Get the terms, i.e. category list using the ID of the product

    $terms = get_the_terms( $values['product_id'], 'product_cat' );
    // Because a product can have multiple categories, we need to iterate through the list of the products category for a match
    foreach ($terms as $term) 
    {
        // 19 is the ID of the category for which we want to remove the payment gateway
        if($term->term_id == $category_ID){
    $surcharge  = 1;

    if ( in_array( WC()->customer->shipping_state, $state && ) ) {
        $woocommerce->cart->add_fee( 'State Tire Fee', $surcharge, true, '' );
    }
}

How can I set a progressive fee based on items from a specific category and customers from a specific state?

Any help will be appreciated.

  • 写回答

1条回答 默认 最新

  • dongzouxigu12345 2018-07-11 17:55
    关注

    There is some errors and your code is a bit outdated… The code bellow will set a progressive fee based on cart item quantity from a specific product category and for a specific state only.

    add_action( 'woocommerce_cart_calculate_fees', 'wc_custom_surcharge', 20, 1 );
    function wc_custom_surcharge( $cart ) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return; // Exit
    
        ## Your Settings (below) ##
    
        $categories      = array(19);
        $targeted_states = array('FL');
        $base_rate       = 1;
    
        $user_state = WC()->customer->get_shipping_state();
        $user_state = empty($user_state) ? WC()->customer->get_billing_state() : $user_state;
        $surcharge  = 0; // Initializing
    
        // If user is not from florida we exit
        if ( ! in_array( $user_state, $targeted_states ) )
            return; // Exit
    
        // Loop through cart items
        foreach ( $cart->get_cart() as $cart_item ) {
            if ( has_term( $categories, 'product_cat', $cart_item['product_id'] )  ){
                // calculating fee based on the defined rate and on item quatinty
                $surcharge += $cart_item['quantity'] * $base_rate;
            }
        }
    
        // Applying the surcharge
        if ( $surcharge > 0 ) {
            $cart->add_fee( __("State Tire Fee", "woocommerce"), $surcharge, true );
        }
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化