如何在 woocommerce 上制作特定的支付网关以免费送货

Posted

技术标签:

【中文标题】如何在 woocommerce 上制作特定的支付网关以免费送货【英文标题】:How do I make a specific payment gateway to be free shipping on woocommerce 【发布时间】:2018-02-17 16:12:36 【问题描述】:

对于这些运输方式,我希望有: - “免运费”仅适用于货到付款 (COD) 付款方式(我刚刚将其重命名为其他标签,但我使用的是 COD 网关)。 - 其他支付网关的“统一费率”(当然不包括 COD 支付方式)

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

例如像这个截图:


类似未回答的问题:Woocommerce free shipping based on payment gateway selected

【问题讨论】:

当您开始说您希望“货到付款选项免费送货”时,您的问题有些不清楚,最后您却说相反……请澄清。谢谢。 抱歉给您带来了困惑,但为了简单起见,我发现这个问题与我的***.com/questions/23106558/… 相同 【参考方案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 事件,以便看到上面购物车中反映的变化。

因此,作为 hack,我添加了一个循环,每 500 毫秒将更改处理程序重新添加到页脚事件(如果您的主题没有实现 wp_footer 挂钩,请确保添加它),如果您决定使用此代码,因为有更好的方法来检查更改事件是否需要重新添加,只是我今天没有太多时间。

柯达

【讨论】:

在这种情况下,我会相应地修改我的答案,感谢现场。 如果我这样做每个支付网关都将免费送货,我只希望免费送货仅适用于 COD,而不适用于 BAC、支票、Paypal - 这三个有固定的运费,我使用了 WooCommerce高级运输插件,可根据数量设置运输规则。 请再次检查我的答案,我已经用应该可以工作的解决方案对其进行了修改。 代码有效我只是将 BACS 更改为 COD,因为我已将 cod 用于所述付款选项

以上是关于如何在 woocommerce 上制作特定的支付网关以免费送货的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 中为特定支付网关添加自定义费用

Woocommerce 中特定支付网关的结帐附加字段

在 WooCommerce 中更改特定的支付网关标题

WooCommerce - 隐藏支付网关

如何在 WooCommerce 的订单支付页面上检索订单 ID

如何通过 WooCommerce 中管理员端的更改订单设置支付网关