定制的woocommerce购物车附加费取决于产品种类(非pdf)

时间:2017-09-20 20:40:38

标签: php wordpress woocommerce cart shipping

在WooCommerce中,我使用下面的代码为我的一个客户在儿童主题的functions.php文件中为加拿大客户的销售额添加了12美元的附加费。

但我需要删除所有pdf下载的费用。

这可能会改变我使用的代码吗?

这是我的代码:

add_action( 'woocommerce_cart_calculate_fees','xa_add_surcharge' );
function xa_add_surcharge() {
    global $woocommerce;

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

    $county     = array('CA');
    $fee    = 12.00;

    if ( in_array( $woocommerce->customer->get_shipping_country(), $county ) ) :
        $surcharge = + $fee;
        $woocommerce->cart->add_fee( 'Surcharge for International Orders', $surcharge, true, '' );
    endif;
}

1 个答案:

答案 0 :(得分:0)

可以检查购物车商品是否有不可下载的商品 (或取决于非虚拟产品的PDF产品设置)

此外,我稍微重新审视了您的代码:

add_action( 'woocommerce_cart_calculate_fees','add_custom_surcharge', 10, 1  );
function add_custom_surcharge( $wc_cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    $countries = array('CA'); // Defined countries

    // Continue only for defined countries
    if( ! in_array( WC()->customer->get_shipping_country(), $countries ) ) return;

    $fee_cost = 12; // The Defined fee cost
    $downloadable_only = true;

    // Checking cart items for NON downloadable products
    foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ) {
        // Checks if a product is not downloadable.
        if( ! $cart_item['data']->is_downloadable( ) ){ // or cart_item['data']->is_virtual()
            $downloadable_only = false;
            break;
        }
    }
    // If one product is not downloadable and if customer shipping country is Canada we add the fee
    if ( ! $downloadable_only )
        $wc_cart->add_fee( "Surcharge for International Orders", number_format( $fee_cost, 2 ), true );
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

所有代码都在Woocommerce 3+上进行测试并且有效。