根据 Woocommerce 选择的付款方式更改结帐时的付款按钮

Posted

技术标签:

【中文标题】根据 Woocommerce 选择的付款方式更改结帐时的付款按钮【英文标题】:Change Pay button on checkout based on Woocommerce chosen payment method 【发布时间】:2018-08-30 12:43:08 【问题描述】:

您好,有人知道如何根据选择的付款方式更改结帐时的付款按钮吗?我找到了一些东西,但我不知道我是否可以将它变成 function.php 中的 sn-p?谢谢你。

    public function __construct() 
    $this->id = 'ry_ecpay_atm';
    $this->has_fields = false;
    $this->order_button_text = __('Pay via ATM', RY_WT::$textdomain);
    $this->method_title = __('ECPay ATM', RY_WT::$textdomain);
    $this->method_description = '';

【问题讨论】:

【参考方案1】:

我认为这是一个更简单的解决方案:

add_filter('woocommerce_available_payment_gateways', 'change_barion_label');
function change_barion_label($gateways) 
    if($gateways['ry_ecpay_atm']) 
        $gateways['ry_ecpay_atm']->order_button_text = 'new label';
    
    return $gateways;

WooCommerce 在加载支付网关时运行此过滤器,因此它应该在站点范围内工作。

【讨论】:

【参考方案2】:
add_filter('woocommerce_order_button_text', 'custom_order_button_text' );
function custom_order_button_text( $order_button_text ) 
    $default = __( 'Place order', 'woocommerce' ); // If needed
    // Get the chosen payment gateway (dynamically)
    $chosen_payment_method = WC()->session->get('chosen_payment_method');

    ## --- For TESTING raw output on the chosen gateway ID --- ##
    // echo '<pre>' . $chosen_payment_method . '</pre>'; // <=== uncomment for testing

    // Set your payment gateways IDs in EACH "IF" statement
    if( $chosen_payment_method == 'bacs')
        // HERE set your custom button text
        $order_button_text = __( 'Bank wire payment', 'woocommerce' ); 
        elseif( $chosen_payment_method == 'ecpay_shipping_pay')
        // HERE set your custom button text
        $order_button_text = __( 'Place order via Market', 'woocommerce' ); 
        elseif( $chosen_payment_method == 'ecpay')
        // HERE set your custom button text
        $order_button_text = __( 'Place order via ATM/Credit Card', 'woocommerce' ); 
     
    // jQuery code: Make dynamic text button "on change" event ?>
    <script type="text/javascript">
    (function($)
        $('form.checkout').on( 'change', 'input[name^="payment_method"]', function() 
            var t =  updateTimer: !1,  dirtyInput: !1,
                reset_update_checkout_timer: function() 
                    clearTimeout(t.updateTimer)
                ,  trigger_update_checkout: function() 
                    t.reset_update_checkout_timer(), t.dirtyInput = !1,
                    $(document.body).trigger("update_checkout")
                
            ;
            t.trigger_update_checkout();
        );
    )(jQuery);
    </script><?php

    return $order_button_text;
  

这是该下拉菜单中的付款。

'ecpay_payment_methods' => array(
            'title'     => __( 'Payment Method', 'ecpay' ),
            'type'      => 'multiselect',
            'description'   => __( 'Press CTRL and the right button on the mouse to select multi payments.', 'ecpay' ),
            'options'   => array(
                'Credit'    => $this->get_payment_desc('Credit'),
                'Credit_3'  => $this->get_payment_desc('Credit_3'),
                'Credit_6'  => $this->get_payment_desc('Credit_6'),
                'Credit_12'     => $this->get_payment_desc('Credit_12'),
                'Credit_18'     => $this->get_payment_desc('Credit_18'),
                'Credit_24'     => $this->get_payment_desc('Credit_24'),
                'WebATM'    => $this->get_payment_desc('WebATM'),
                'ATM'       => $this->get_payment_desc('ATM'),
                'CVS'       => $this->get_payment_desc('CVS'),
                'BARCODE'   => $this->get_payment_desc('BARCODE'),
                'ApplePay'  => $this->get_payment_desc('ApplePay')
            ),

【讨论】:

这个下拉菜单非常不寻常......所以我不知道如何处理它,因为代码与支付网关 ID 一起工作,在这种情况下是“ecpay”......你应该需要添加一个 @987654324 @查看选择不同值时显示的内容(仅用于临时测试) 我应该在插件文件中添加代码并从下拉菜单中选择付款方式,然后查看屏幕上打印的内容,是吗?谢谢。 好的,在你的代码中看到它(我已经更新了它)......你必须取消注释并保存,只是为了测试并查看当你在网关上进行更改时的输出+选择字段。这样您将获得输出……但我不确定您的选择字段是否会有所作为,因为它们非常自定义且不寻常…… 这里是打印结果。 ibb.co/hhjOaH 我通过选择 ATM 或信用卡购物车获得了“ecpay”。这是否意味着该功能不适用于下拉菜单? 是的,因为这是非常自定义的东西,woocommerce 无法处理...... Woocommerce 只处理支付网关 ID(就像它们显示在 Woocommerce 设置 > 结帐上一样,所以在您的情况下,它是一种子 ID由相关的支付网关插件专门处理……【参考方案3】:

这可以使用以下代码完成(您将在其中设置支付网关 ID 和相应的所需按钮文本)

add_filter('woocommerce_order_button_text', 'custom_order_button_text' );
function custom_order_button_text( $order_button_text ) 
    $default = __( 'Place order', 'woocommerce' ); // If needed
    // Get the chosen payment gateway (dynamically)
    $chosen_payment_method = WC()->session->get('chosen_payment_method');

    // Set your payment gateways IDs in EACH "IF" statement
    if( $chosen_payment_method == 'bacs')
        // HERE set your custom button text
        $order_button_text = __( 'Bank wire payment', 'woocommerce' ); 
     elseif( $chosen_payment_method == 'ry_ecpay_atm')
        // HERE set your custom button text
        $order_button_text = __( 'Place order via ECPay', 'woocommerce' ); 
    
    // jQuery code: Make dynamic text button "on change" event ?>
    <script type="text/javascript">
    (function($)
        $('form.checkout').on( 'change', 'input[name^="payment_method"]', function() 
            var t =  updateTimer: !1,  dirtyInput: !1,
                reset_update_checkout_timer: function() 
                    clearTimeout(t.updateTimer)
                ,  trigger_update_checkout: function() 
                    t.reset_update_checkout_timer(), t.dirtyInput = !1,
                    $(document.body).trigger("update_checkout")
                
            ;
            t.trigger_update_checkout();
        );
    )(jQuery);
    </script><?php

    return $order_button_text;

代码进入您的活动子主题(或主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

嗨,非常感谢。它有效,但我的问题没有解决。我有更多的付款方式。如何配置代码?该代码是否适用于这样的下拉支付菜单?ibb.co/eE1GCx 感谢您的提醒。我只使用社区情侣时间。我只是投票并解决。这是代码。它真的很好用,只是这里不能定义 dorpdown 付款,对吧?而且代码太长了。

以上是关于根据 Woocommerce 选择的付款方式更改结帐时的付款按钮的主要内容,如果未能解决你的问题,请参考以下文章

根据 Woocommerce 中选择的付款方式禁用运输方式

根据 WooCommerce 中的付款方式提高购物车商品价格

WooCommerce:根据运输方式自动完成已付款订单

根据 Woocommerce 订单状态禁用特定付款方式

根据 Woocommerce 中的运输方式和付款方式添加费用

WooCommerce 根据用户角色更改 BACS 订单状态