【问题标题】:Disable COD when exceeded specific amount超过特定数量时禁用 COD
【发布时间】:2018-05-21 05:53:25
【问题描述】:

我需要禁用 Woocommerce COD 选项并在总价超过一定金额时取消选中它。

我试过这段代码,但什么也没做!

add_filter('woocommerce_available_payment_gateways', 'unsetting_payment_gateway', 10, 1);
function unsetting_payment_gateway( $available_gateways ) {
    global $woocommerce;
    $shipping_cost = WC()->cart->get_cart_shipping_total();
    $amount = $woocommerce->cart->cart_contents_total + $woocommerce->cart->tax_total + $shipping_cost;

  $max = 999.9 * WCPBC()->customer->exchange_rate;

    if($amount >= $max){   ?>
    <script type="text/javascript">
        jQuery(document).ready(function ($) {
          $("#payment_method_cod").disabled = true;
          $("#payment_method_cod").checked = false;       
        });       
    </script>    
    <?php
    add_action( 'woocommerce_review_order_before_payment', 'COD_exceed_amount_before_paying_notice' );
  }
    return $available_gateways;
}

function COD_exceed_amount_before_paying_notice() {
  wc_print_notice( __( 'COD amount exceeded!', 'woocommerce' ), 'notice' );
}

【问题讨论】:

  • 这不是删除任何支付网关的正确方法。
  • 为什么 javascript...满足您的条件时,只需取消设置网关... unset($available_gateways['cod']);我有一篇文章可以更好地解释它 - mingocommerce.com/…

标签: wordpress woocommerce payment-gateway checkout


【解决方案1】:

首先你需要注销 woocommerce/assets/js/frontend/checkout.js

然后在你的主题资产文件夹中包含 checkout.js 并在主题脚本文件之后再次注册

那么您的代码将按预期工作。

用于注销使用下面的代码,

wp_deregister_script($handle);

再次注册,

wp_enqueue_script(参数);

【讨论】:

  • 我尝试再次将 woocommerce js 出列和入队,但没有任何改变。也许我没有走错路!无论如何,谢谢你的回答。
  • 不出队使用注销,因为我已经在我的回答中显示了。在注销中仅使用结帐注册脚本的 id
  • 但是在使用deregister的时候,我必须注册我的js文件,而且是一个小修改,所以我不想在我的主题中添加一个新的js文件。
  • 这是我遇到同样问题时所做的,这取决于你
【解决方案2】:
 add_filter( 'woocommerce_available_payment_gateways' , 'hide_payment_gateway', 20, 1);
    /**
    * remove cod gateway if cart total > 100
    * @param $gateways
    * @return mixed
    */
            
function hide_payment_gateway( $gateways ){
     //change whatever amount you want
     if( WC()->cart->subtotal < 699 ){
             
     // then unset the 'cod' key (cod is the unique id of COD Gateway)
     unset( $gateways['cod'] );
     add_action( 'woocommerce_review_order_before_payment', 'COD_exceed_amount_before_paying_notice' );
     }
     return $gateways;
}

function COD_exceed_amount_before_paying_notice() {
     wc_print_notice( __( 'COD option not available on orders below 699.00', 'woocommerce' ), 'notice' );
}

【讨论】:

  • 您的答案可以通过添加有关代码的作用以及它如何帮助 OP 的更多信息来改进。
【解决方案3】:

您应该更改您的 jquery 代码。您能否尝试以下代码并再次检查您的代码。因为那对我有用。

<script type="text/javascript">
        jQuery( document ).ready(function($) {          
          $("#payment_method_cod").prop('checked', false);                 
          $("#payment_method_cod").attr('disabled', true);        
        });       
    </script>    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2012-03-14
    • 1970-01-01
    • 2023-03-18
    • 2018-12-07
    • 2018-09-17
    • 2013-08-25
    相关资源
    最近更新 更多