wordpress - 如何让特定的支付网关在 woocommerce 上免费送货

标签 wordpress woocommerce payment-gateway checkout shipping

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

我的问题:如何让特定的支付网关在选择时免运费?

例如在这个截图中:

See Screenshot


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

最佳答案

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 中的上传插件功能安装插件。

基本上它所做的是检查 session 以查看选择了哪种付款方式,然后如果选择了 bacs 方法,则会添加一笔费用,该费用减去运费总额。这是有效的,但因为购物车使用 AJAX 更新,所以每次付款方式更改时,您都需要触发附在 JavaScript 正文中的 update_checkout 事件,以便看到上面的购物车中反射(reflect)的更改。

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

科达

关于wordpress - 如何让特定的支付网关在 woocommerce 上免费送货,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121480/

相关文章:

php - 我如何在我的成功页面上知道客户paypal交易是否成功

php - 为每个section定义 'Default Template'

php - 带有自定义字段变量的 SQL 查询

javascript - jQuery 代码不适用于 wordpress 网站

php - 获取 woocommerce_order_status_completed Hook 上的用户 ID

Paypal 订阅 : Adjustment of the amount on revised plan

php - htaccess 将 root 重定向到子目录,但允许 root 中的 index.php 运行

wordpress - WooCommerce 产品网格(重新排列产品详细信息)

php - WooCommerce 在变体标签后显示内容

payment-gateway - PayPal 的 Payflow Gateway SDK 示例不起作用