php 在Woocommerce中设置一个百分比折扣到本地皮卡运输方法

hgc7kmma  于 2023-01-12  发布在  PHP
关注(0)|答案(2)|浏览(125)

我有一个WordPress网站,使用WooCommerce插件。我想提供买家5%从购物车总减少,如果他们选择本地皮卡作为运输方式。
我已经试过**- 5 * [数量]**,似乎不起作用。
我也试过-0.95 * [cost],但没有成功
第一节第一节第一节第一节第一次

ovfsdjhp

ovfsdjhp1#

我正在使用WooCommerce 3,并通过在活动主题的function.php中编写一个函数来实现上述结果。

function prefix_add_discount_line( $cart ) {
  $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
  $chosen_shipping_no_ajax = $chosen_methods[0];
  if ( 0 === strpos( $chosen_shipping_no_ajax, 'local_pickup' ) ) {

    // Define the discount percentage
    $discount = $cart->subtotal * 0.05;
    // Add your discount note to cart
    $cart->add_fee( __( 'Collection discount applied', 'yourtext-domain' ) , -$discount );
  }
}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line');
ttcibm8c

ttcibm8c2#

    • fee API的问题在于它总是对负fee**(折扣)应用Taxes,而不关心现有的优惠券折扣。

下面的代码,将设置一个定义的折扣百分比在航运方法"本地皮卡"本身.
您将需要使用简单的初始成本而不是您的公式来设置参考运费。例如,它可以是10,并将被代码折扣取代。
您可能需要在"Shipping options"选项卡下的常规运输设置中选择"Enable debug mode",以暂时禁用运输缓存。
代码 (您将设置您的折扣百分比)

add_filter('woocommerce_package_rates', 'local_pickup_percentage_discount', 12, 2);
function local_pickup_percentage_discount( $rates, $package ){
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return $rates;

    // HERE define the discount percentage
    $percentage = 5; // 5%
    $subtotal = WC()->cart->get_subtotal();

    // Loop through the shipping taxes array
    foreach ( $rates as $rate_key => $rate ){
        $has_taxes = false;
        // Targetting "flat rate"
        if( 'local_pickup' === $rate->method_id ){
            // Add the Percentage to the label name (otional
            $rates[$rate_key]->label .= ' ( - ' . $percentage . '% )';
            // Get the initial cost
            $initial_cost = $new_cost = $rates[$rate_key]->cost;
            // Calculate new cost
            $new_cost = -$subtotal * $percentage / 100;
            // Set the new cost
            $rates[$rate_key]->cost = $new_cost;

            // Taxes rate cost (if enabled)
            $taxes = [];
            // Loop through the shipping taxes array (as they can be many)
            foreach ($rates[$rate_key]->taxes as $key => $tax){
                if( $rates[$rate_key]->taxes[$key] > 0 ){
                    // Get the initial tax cost
                    $initial_tax_cost = $new_tax_cost = $rates[$rate_key]->taxes[$key];
                    // Get the tax rate conversion
                    $tax_rate    = $initial_tax_cost / $initial_cost;
                    // Set the new tax cost
                    $taxes[$key] = $new_cost * $tax_rate;
                    $has_taxes   = true; // Enabling tax
                }
            }
            if( $has_taxes )
                $rates[$rate_key]->taxes = $taxes;
        }
    }
    return $rates;
}

代码进入您的活动子主题(或活动主题)的function.php文件。
别忘了禁用"启用调试模式"选项在航运设置。

相关问题