2017-09-08 71 views
2

对于那些运输方式,我想有: - “免费送货”仅适用于货到付款(COD)付款方式(我刚更名为它到其他标签,但我正在使用COD网关)。 - 其他支付网关的“统一费率”(当然不包括COD支付方式)如何使特定支付网关免费送货woocommerce

我的问题:如何选择特定支付网关时免费送货?

例如像在这个截图:

See Screenshot


类似的悬而未决的问题:Woocommerce free shipping based on payment gateway selected

+0

东西是你的问题非常不清楚。谢谢。 – LoicTheAztec

+0

不好意思,但为了简单起见,我发现这个问题与我的一样https://stackoverflow.com/questions/23106558/woocommerce-free-shipping-based-on-payment-gateway-selected –

回答

1

WooCommerce要求航运网关之前选择,这是COD是如何工作的,因为它检查如果在提供COD作为选项之前选择启用的送货方式。所以如果COD方法不适用于你,那么没有其他办法可以实现这一点,因为你要求结账过程从它的设计方式向后工作。

由于WooCommerce的工作方式,一旦选择了支付网关,您就无法修改送货。您只能在每个网关的代码中添加额外费用。


一段时间考虑这个问题后,我得到了好奇,我想我不得不一出戏,看它是否是忠实地是不可能的。事实证明,有一点粗的黑客其实你可以得到这个工作,这里是一个基本的插件,能完成这个任务:

<?php 
/** 
* Plugin Name: Free Shipping For BACS 
* Description: Makes shipping for BACS free. 
* Version: 0.0.1 
* Author: Kodaloid 
* Requires at least: 4.4 
* Tested up to: 4.8 
*/ 

if (!defined('ABSPATH')) exit; 

add_action('init', 'fg_init'); 

function fg_init() { 
    add_action('woocommerce_cart_calculate_fees', 'fg_add_fee'); 
    add_action('wp_footer', 'fg_footer', 9999); 
} 

function fg_footer() { 
    ?> 
    <script type="text/javascript"> 
    jQuery(function($) { 
     setInterval(function() { 

     $(".input-radio[name='payment_method']").off().change(function() { 
     console.log('triggered'); 
      jQuery('body').trigger('update_checkout'); 
     }); 

     }, 500); 
    }); 
    </script> 
    <?php 
} 

function fg_add_fee($the_cart) { 
    global $woocommerce; 
    if ($woocommerce->session->chosen_payment_method == 'bacs') { 
    $woocommerce->cart->add_fee('Free Shipping For BACS', -($the_cart->shipping_total), true, 'standard'); 
    } 
} 

保存上面的代码为free_shipping_for_bacs.php和安装插件使用WordPress中的上传插件功能。

基本上这是检查会话以查看哪个付款方式已被选中,然后如果选择bacs方法增加一个费用,减去运费的总和。这是有效的,但是因为购物车使用AJAX进行更新,每次付款方式发生变化时,您都需要触发JavaScript中附加到主体的update_checkout事件,以便查看上述购物车中反映的更改。

因此,我添加了一个循环,每500ms重新添加更改处理程序到页脚事件(如果您的主题没有实现wp_footer钩子,请确保添加它),这可以并应该改进如果您决定使用此代码,因为有更好的方法来检查更改事件是否需要重新添加,这只是我今天没有太多时间。当你开始说你要“现金上传递选项设置为免费送货”,并在年底你说的恰恰相反......请澄清

幸田来未

+1

在那我会相应地修改我的答案,谢谢你的提问。 – Kodaloid

+0

如果我这样做,每个支付网关都将免费送货,我只希望免费送货仅适用于COD,而不适用于BAC,支票,Paypal - 这三种具有固定运费,我使用WooCommerce Advanced Shipping插件来设置其运费基于数量的规则。 –

+0

请再次检查我的答案,我修改了它应该工作的解决方案。 – Kodaloid