wordpress 我如何使一个特定的支付网关是免费送货的woocommerce

vq8itlhq  于 2023-01-12  发布在  WordPress
关注(0)|答案(1)|浏览(158)

对于这些运输方式,我希望:

  • “免费送货”只适用于货到付款(COD)的支付方式(我只是把它改名为其他标签,但我使用的COD网关)。
  • 其他支付网关采用“统一费率”(当然不包括货到付款方式)
    **我的问题:**我如何使特定的支付网关是免费送货时选择?

例如,如以下屏幕截图所示:

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

2cmtqfgy

2cmtqfgy1#

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 ,您需要触发update_checkout事件附加到JavaScript的身体每次支付方式的变化,以查看在上面的购物车反映的变化。
因此,作为一个黑客我已经添加了一个循环,每500ms重新添加一次更改处理程序到页脚事件(如果您的主题没有实现wp_footer钩子,请确保添加它),这可以而且应该得到改善,如果你决定使用这段代码,因为有更好的方法来检查是否需要重新添加更改事件,只是我今天没有太多的时间。
科达

相关问题