如何防止Woocommerce在Checkout页面上选择默认付款方式?

时间:2015-08-12 14:00:34

标签: jquery wordpress woocommerce payment checkout

在结帐页面上显示付款方式,默认情况下会自动选择第一个付款方式。我需要阻止选择,因此WC最初没有选择付款方式。

到目前为止我尝试了两件事:

    来自Chrome控制台的
  1. jQuery:

    jQuery('。payment_methods input.input-radio')。prop('checked',false);

  2. 结果:

    [<input id=​"payment_method_paypal" type=​"radio" class=​"input-radio" name=​"payment_method" value=​"paypal" data-order_button_text=​"Proceed to PayPal" checked=​"checked">​, 
    <input id=​"payment_method_accountfunds" type=​"radio" class=​"input-radio" name=​"payment_method" value=​"accountfunds" data-order_button_text>​]
    
    1. 从payment-method.php Woocommerce模板文件中删除代码:

      选中($ gateway-&gt;选择,false);

    2. 两者都没有效果。怎么做?请问有什么片段或建议吗?

      编辑:

      还试过这个:

      function wpchris_filter_gateways( $gateways ){
      
      global $woocommerce;
      
      foreach ($gateways as $gateway) {
          $gateway->chosen = 0;
      }
      return $gateways;
      
      }
      add_filter( 'woocommerce_available_payment_gateways', 'wpchris_filter_gateways', 1);
      

6 个答案:

答案 0 :(得分:4)

好的,搞定了。方法如下:

  1. 从以下位置复制javascript文件:
  2. /wp-content/plugins/woocommerce/assets/js/frontend/checkout.js

    进入:

    /wp-content/themes/Your-Theme/woocommerce/js/checkout.js

    1. 打开新创建的文件并搜索以下代码:

          if ($('.woocommerce-checkout').find('input[name=payment_method]:checked').size() === 0) {
              $('.woocommerce-checkout').find('input[name=payment_method]:eq(0)').attr('checked', 'checked');
          }
      
    2. 它应该在第298行附近。继续发表评论。

      1. 将其添加到functions.php文件中:

            function wpchris_override_woo_checkout_scripts() {
                wp_deregister_script('wc-checkout');
                wp_enqueue_script('wc-checkout', get_stylesheet_directory_uri() . '/woocommerce/js/checkout.js', array('jquery', 'woocommerce', 'wc-country-select', 'wc-address-i18n'), null, true);
            }
            add_action('wp_enqueue_scripts', 'wpchris_override_woo_checkout_scripts');
        
            function wpchris_unselect_payment_method() {
                echo "<script>jQuery( '.payment_methods input.input-radio' ).removeProp('checked');</script>";
            }
            add_action('woocommerce_review_order_before_submit','wpchris_unselect_payment_method' );
        
            function wpchris_filter_gateways( $gateways ){
                global $woocommerce;
        
                foreach ($gateways as $gateway) {
                    $gateway->chosen = 0;
                }
        
                return $gateways;
            }
            add_filter( 'woocommerce_available_payment_gateways', 'wpchris_filter_gateways', 1);
        
      2. 现在,刷新Checkout页面时不应检查默认付款方式。

答案 1 :(得分:2)

我有同样的问题,我已经解决了这个问题:

  1. 使用我的子主题checkout-override-js覆盖checkout-js文件。

  2. 然后注释掉以下代码:

  3. 行:48:this.init_payment_methods();
    行:58:

    init_payment_methods: function() {
                var $payment_methods = $( '.woocommerce-checkout' ).find( 'input[name="payment_method"]' );

    // If there is one method, we can hide the radio input if ( 1 === $payment_methods.size() ) { $payment_methods.eq(0).hide(); } // If there are none selected, select the first. if ( 0 === $payment_methods.filter( ':checked' ).size() ) { $payment_methods.eq(0).attr( 'checked', 'checked' ); } // Trigger click event for selected method $payment_methods.filter( ':checked' ).eq(0).trigger( 'click' ); },

    行:113:wc_checkout_form.init_payment_methods();

    这将删除默认的付款方式选择。您可以使用这些代码使其符合您的要求。

答案 2 :(得分:2)

没有通过过滤器实现此目标的好方法,这不适用于最新版本的woocommerce 4.x:

//DEPRECATED. Will not work with woocommerce 4.x and above    
add_filter( 'pre_option_woocommerce_default_gateway' . '__return_false', 99 );

而不是像其他答案所建议的那样覆盖Woocommerce核心JS文件,而是这样做:

var $paymentCheckboxes = $( ".woocommerce-checkout-payment" ).find( '[name="payment_method"]');
$paymentCheckboxes.attr('checked', false);

答案 3 :(得分:0)

补充@Tosh答案,但添加了JavaScript回调,因此它每次通过ajax进行结帐更新时都会运行。

jQuery(document).ready(function( $ ){
    $( document ).on( 'updated_checkout', function() {
        var $paymentCheckboxes = $( ".woocommerce-checkout-payment" ).find( '[name="payment_method"]');
        $paymentCheckboxes.attr('checked', false);
        $('.payment_box').hide();
    });
});

经过测试,可以正常工作。

答案 4 :(得分:0)

这些解决方案都不适合我。

我的解决方案是: 让 WooCommerce 表现得像它想要的那样 我在列表顶部添加了一个付款选项(在本例中为 COD)。 使用 CSS,我隐藏了整个 <li>

然后我在“woocommerce_after_checkout_validation”中添加了验证。 如果用户选择了这个,我只是返回了“未选择付款”的错误

似乎工作得很好。

答案 5 :(得分:-1)

payment-method.php中,我只是注释掉了这一部分(WooCommerce 4.5.2的第23行)

<?php //checked( $gateway->chosen, true ); ?>

(如果您有子主题,请将修改后的文件放入wp-content/themes/yourchildtheme/woocommerce/checkout/ directory。)

也需要在checkout.min.js(在wp-content/plugins/woocommerce/assets/js/frontend/)进行更改。在第80行(WooCommerce 4.5.2)对此进行了注释

/*if ( 0 === $payment_methods.filter( ':checked' ).length ) {
                $payment_methods.eq(0).prop( 'checked', true );*/

不幸的是,仅通过将第二个文件复制到子主题文件夹中就不能覆盖它。此解决方案尚不支持更新。但是也许可以继续,并以一种聪明的(尽可能)本机(尽可能)的方式使其经过更新。 Here are some solutions i found for that

p.s:即使客户更改了邮政编码,地址数据等,该解决方案仍保留了所选的付款方式。