简体   繁体   English

在 WooCommerce 中乘以运费

[英]Multiply shipping cost in WooCommerce

I've tried to multiply shipping cost depending on how many pallets are in order.我试图根据订购的托盘数量来增加运费。 I think filter is wrong or something.我认为过滤器是错误的或什么的。 It just doesnt change shipping price.它只是不改变运费。

$calc = ceil($a+$b / 8); $a > is quantity of pallets, $b > is quantity of units what calculates how many pallets. $a > 是托盘数量,$b > 是计算托盘数量的单位数量。

My code (function.php):我的代码(function.php):

add_filter( 'woocommerce_cart_shipping_total', 'woocommerce_cart_shipping_total_filter_callback', 11, 2 );
function woocommerce_cart_shipping_total_filter_callback( $total, $cart )
{
     if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( 0 < $cart->get_shipping_total() ) {
        if ( $cart->display_prices_including_tax() ) {
            $a = 0;
            $b = 0;
            foreach( WC()->cart->get_cart() as $cart_item ){
                if (!empty(get_post_meta($cart_item['variation_id'], '_number_field', true))) {
                    $a += $cart_item['quantity'];
                } else {
                    $atk = strstr(get_post_meta($cart_item['variation_id'], '_alus_al', true), 'tk', true);
                    
                    $b += ceil($cart_item['quantity'] / $atk);
                }
            }
            $calc = ceil($a+$b / 8); // 8 pallets maximum
            $total = wc_price( ( $cart->shipping_total + $cart->shipping_tax_total ) * $calc );
            if ( $cart->shipping_tax_total > 0 && ! wc_prices_include_tax() ) {
                $total .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>';
            }
        } else {
            $a = 0;
            $b = 0;
            foreach( WC()->cart->get_cart() as $cart_item ){
                if (!empty(get_post_meta($cart_item['variation_id'], '_number_field', true))) {
                    $a += $cart_item['quantity'];
                } else {
                    $atk = strstr(get_post_meta($cart_item['variation_id'], '_alus_al', true), 'tk', true);
                    
                    $b += ceil($cart_item['quantity'] / $atk);
                }
            }
            $calc = ceil($a+$b / 8); // 8 pallets maximum
            $total = wc_price( $cart->shipping_total * $calc );
            if ( $cart->shipping_tax_total > 0 && wc_prices_include_tax() ) {
                $total .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat()  . '</small>';
            }
        }
    }
    return  $total;
}

My problem is that it doesnt change shipping cost.我的问题是它不会改变运费。 So I excpect it doesnt work.所以我预计它不起作用。

Like user @LoicTheAztec mentioned I should use woocommerce_package_rates to override custom prices for shipping plugin.就像用户 @LoicTheAztec 提到的那样,我应该使用woocommerce_package_rates来覆盖运费插件的自定义价格。

add_filter( 'woocommerce_package_rates', 'custom_shipping_costs', 20, 2 );
function custom_shipping_costs( $rates, $package ) {
    $a = 0;
    $b = 0;
    foreach( WC()->cart->get_cart() as $cart_item ){
        if (!empty(get_post_meta($cart_item['variation_id'], '_number_field', true))) {
            $a += $cart_item['quantity'];
        } else {
            $atk = strstr(get_post_meta($cart_item['variation_id'], '_alus_al', true), 'tk', true);
            $atb = $atk / 2;
            if ($cart_item['quantity'] < $atb) {
                $b += 0;
            } else {
                $b += ceil($cart_item['quantity'] / $atk);
            }
        }
    }
    $tt = $a+$b;
    $calc = ceil($tt / 8);

    foreach( $rates as $rate_key => $rate ){
        // Excluding free shipping methods
        if( $rate->method_id != 'free_shipping'){
            // Set rate cost
            $rates[$rate_key]->cost = $rates[$rate_key]->cost * $calc;

            // Set taxes rate cost (if enabled)
            $taxes = array();
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $rates[$rate_key]->taxes[$key] > 0 )
                    $taxes[$key] = $new_cost * $tax_rate;
            }
            $rates[$rate_key]->taxes = $taxes;

        }
    }
    return $rates;
}

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

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