PHP-WooCommerce 3.2增加了具有多个“Else If”条件的可变运输保险

时间:2017-10-23 作者:Zach Toth

这是我在这里的第一篇帖子,我对PHP非常陌生,对我来说非常简单。

我需要根据购物车总数为优先邮件添加USPS的可变运费。我尝试过插件,但没有一个能与USPS shipping插件客户端坚持使用的插件一起正常工作,而且我已经将购买任何其他插件的预算增加到了最大。

我创建了一个子主题并添加了一个新函数。php。这是添加防更新php的正确方法正确吗?

我在Git上找到了一个php函数,它根据购物车的超量/不足量添加一个费率,但如果条件是7个可变购物车总数,我还需要添加更多。下面是我用有限的php知识添加所需条件的最佳尝试。有人能帮我把这个代码写出来吗?我遗漏了什么以允许多个其他if条件?

add_action( \'woocommerce_cart_calculate_fees\',\'woocommerce_custom_surcharge\' );
函数woocommerce\\u custom\\u association(){global$woocommerce;

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

$chosen_methods = WC()->session->get( \'chosen_shipping_methods\' );
$chosen_shipping = $chosen_methods[0];

if ( strpos($chosen_shipping, \'USPS_Simple_Shipping_Method\' ) !== false ) {
    // this compare needed since if the string is found at beg of target, it returns \'0\', which is a false value

    $insurance_fee = 0;
    if ( $woocommerce->cart->cart_contents_total  <= 50 ) {
        $insurance_fee = 0;
        return;
    } else {
        if ( $woocommerce->cart->cart_contents_total  > 50  ) { 
            $insurance_fee = 2.05; 
            return; 
    } else {
         if ( $woocommerce->cart->cart_contents_total  > 100  ) { 
            $insurance_fee = 2.45; 
            return; 
    } else {
         if ( $woocommerce->cart->cart_contents_total  > 200  ) { 
            $insurance_fee = 4.60; 
            return;
    } else {
         if ( $woocommerce->cart->cart_contents_total  > 300  ) { 
            $insurance_fee = 5.50; 
            return;
    } else {
         if ( $woocommerce->cart->cart_contents_total  > 400  ) { 
            $insurance_fee = 6.40; 
            return;
    } else {
         if ( $woocommerce->cart->cart_contents_total  > 500  ) { 
            $insurance_fee = 7.30; 
            return;
    }

    $woocommerce->cart->add_fee( \'Insurance\', $insurance_fee, true, \'\' );
}
return;
}

3 个回复
最合适的回答,由SO网友:Zach Toth 整理而成

对于任何一个偶然发现这一点并想实现它的人,我已经发布了这段代码,作为我保持更新的要点。我最近添加了一个if语句,以在选择本地提货时关闭运输保险

https://gist.github.com/Zach-Toth/95041d32b072109fa8fd99c60eff1c5a

SO网友:Rogers Sampaio

因此,如果在每个if语句中都返回空,则函数将永远无法访问:

$woocommerce->cart->add_fee( \'Insurance\', $insurance_fee, true, \'\' );
看看我在下面所做的更改,我还认为如果发货方式不是USPS,您应该添加一个后备方案。

function woocommerce_custom_surcharge() { 
      global $woocommerce;

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

    //General Fall back for shipping and cart totals <= 50
    $insurance_fee = 0;
    $chosen_methods = WC()->session->get( \'chosen_shipping_methods\' );
    $chosen_shipping = $chosen_methods[0];

    if ( strpos($chosen_shipping, \'USPS_Simple_Shipping_Method\' ) !== false ) {

        if ( $woocommerce->cart->cart_contents_total  > 500  ) { 
                $insurance_fee = 7.30; 
        } else if ( $woocommerce->cart->cart_contents_total  > 400  ) { 
                $insurance_fee = 6.40; 
        } else if ( $woocommerce->cart->cart_contents_total  > 300  ) { 
                $insurance_fee = 5.50; 
        } else if ( $woocommerce->cart->cart_contents_total  > 200  ) { 
                $insurance_fee = 4.60; 
        } else if ( $woocommerce->cart->cart_contents_total  > 100  ) { 
                $insurance_fee = 2.45; 
        } else if ( $woocommerce->cart->cart_contents_total  > 50  ) { 
                $insurance_fee = 2.05; 
        }
    }

    //The fallback $insurance_fee value of 0 will be used if none of the conditions are met
    $woocommerce->cart->add_fee( \'Insurance\', $insurance_fee, true, \'\' );
}

SO网友:Zach Toth

已解决!我把这些陈述按错误的顺序排列,如果第一个陈述是满意的,那么其他的都没有被检查。把他们颠倒过来,瞧!我还可以添加一个<;=到每个语句

//General Fall back for shipping and cart totals <= 50
$insurance_fee = 0;
$chosen_methods = WC()->session->get( \'USPS_Simple\' );
$chosen_shipping = $chosen_methods[0]; {

    if ( $woocommerce->cart->cart_contents_total  > 500  ) { 
            $insurance_fee = 7.30; 
    } else if ( $woocommerce->cart->cart_contents_total  > 400  ) { 
            $insurance_fee = 6.40; 
    } else if ( $woocommerce->cart->cart_contents_total  > 300  ) { 
            $insurance_fee = 5.50; 
    } else if ( $woocommerce->cart->cart_contents_total  > 200  ) { 
            $insurance_fee = 4.60; 
    } else if ( $woocommerce->cart->cart_contents_total  > 100  ) { 
            $insurance_fee = 2.45; 
    } else if ( $woocommerce->cart->cart_contents_total  >= 50  ) { 
            $insurance_fee = 2.05; 
    }
}

//The fallback $insurance_fee value of 0 will be used if none of the conditions are met
$woocommerce->cart->add_fee( \'Shipping Insurance\', $insurance_fee, true, \'\' );
}

结束

相关推荐

无法在仪表板中看到所有页面(只能看到3)/wp-admin/edit.php>500错误

一个客户的网站有12个页面,但我们都只能看到其中的3个页面,即使我们有管理员帐户,而创建一个新的管理员帐户并不能解决问题。屏幕选项将不会打开,如果我检查Chrome控制台,我会看到:加载资源失败:服务器响应状态为500():/wp admin/edit。php我看得出来/wp-admin/edit.php 存在。我已删除/wp-admin 和/wp-includes 并上传了新的副本。我上传了一个新的父主题副本,而子主题未被触及。如果我重命名plugins 到plugins.temp 问题仍然存在。感谢您