suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ändern Sie den Text der Schaltfläche „Jetzt bezahlen“ auf der WooCommerce-Checkout-Seite so, dass er mit der Zahlungsgateway-Option übereinstimmt

<p>Ich versuche es jetzt schon seit Stunden und schaffe es trotzdem nicht, dieses „einfache“ Ding zum Laufen zu bringen. </p> <p>Ich habe eine Reihe von Zahlungsgateways zur Verfügung und muss deren Namen (einschließlich des Gesamtbetrags der Bestellung) in den Text der Schaltfläche „Jetzt bezahlen“ einfügen. </p> <p><strong>Beispiel</strong>: „<code>Verwenden Sie Stripe, um die Bestellung im Wert von 49 $ zu bezahlen</code>“</p> <p>Ich habe einen Code, der den Checkout beim Wechsel des Gateways automatisch aktualisieren soll.Kann mir bitte jemand helfen? </p> <pre class="brush:php;toolbar:false;">add_filter( 'woocommerce_order_button_text', 'order_button_text_based_on_gateway', 10, 1 ); Funktion order_button_text_based_on_gateway( $cart ) { // Stellen Sie sicher, dass wir das Zahlungsgateway erhalten $ payment_method = WC()->session->get( 'chosen_ payment_method' ); // Basierend auf verschiedenen Gateways unterschiedliche Schaltflächentexte anzeigen (Bestellschaltfläche) if ( $ payment_method == ' bacs ' ) { return sprintf( '%s %s', __('Bestellung aufgeben und bezahlen', 'woocommerce'), strip_tags( WC()->cart->get_total() ) . } elseif ( $ payment_method == ' check ' ) { return sprintf( '%s %s', __('Bestellung aufgeben und bezahlen', 'woocommerce'), strip_tags( WC()->cart->get_total() ) ) . } elseif ( $ payment_method == ' cod ' ) { return sprintf( '%s %s', __('Bestellung aufgeben und bezahlen', 'woocommerce'), strip_tags( WC()->cart->get_total() ) . } elseif ( $ payment_method == ' etco ' ) { return sprintf( '%s %s', __('Bestellung aufgeben und bezahlen', 'woocommerce'), strip_tags( WC()->cart->get_total() ) . } else ( $ payment_method == ' Stripe ' ) { return sprintf( '%s %s', __('Bestellung aufgeben und bezahlen', 'woocommerce'), strip_tags( WC()->cart->get_total() ) . } }</pre> <p><strong>Automatisches Update-Checkout-Skript: </strong></p> <pre class="brush:php;toolbar:false;">add_action( 'wp_footer', 'reload_checkout_based_on_gateway_change', 999 ); Funktion reload_checkout_based_on_gateway_change() { if ( is_checkout() && ! is_admin() ) { //PHP beenden und SCRIPT starten ?> <script> ( Funktion( $ ) { $( 'form.checkout' ).on( 'change', 'input[name^="zahlungsmethode"]', function() { $( 'body' ).trigger( 'update_checkout' ); } ); } ) (jQuery); </script> <?php } }</pre> <p><br /></p>
P粉395056196P粉395056196516 Tage vor796

Antworte allen(1)Ich werde antworten

  • P粉594941301

    P粉5949413012023-08-17 10:10:22

    你的代码中有很多错误:

    • 主要错误是关于字符串:'cheque''cheque'是两个不同的字符串。
      所以在所有的if语句中,没有一个支付方式匹配。
    • 另一个错误是else不支持任何条件参数。

    有多种方法可以更改结账“下单”按钮的文本:

    add_filter( 'woocommerce_order_button_text', 'order_button_text_based_on_gateway', 10 );
    function order_button_text_based_on_gateway( $button_text ) {
        if ( is_checkout() && ! is_wc_endpoint_url() ) {
            $payment_method    = WC()->session->get( 'chosen_payment_method' ); // 获取当前支付网关
            $cart_total_string = strip_tags( WC()->cart->get_total() ); // 获取订单总额字符串
            $pay_order_text    = __('Order &amp; Pay', 'woocommerce'); // 下单按钮
    
            if ( $payment_method == 'bacs' ) {
                $payment_method_text = __('using WireTransfer', 'woocommerce');
            } 
            elseif ( $payment_method == 'cheque' ) {
                $payment_method_text = __('with a personal cheque', 'woocommerce');
            } 
            elseif ( $payment_method == 'cod' ) {
                $payment_method_text = __('on delivery', 'woocommerce');
            }
            elseif ( $payment_method == 'etco' ) {
                $payment_method_text = __('using EtCo', 'woocommerce');
            }
            elseif ( $payment_method == 'stripe' ) {
                $payment_method_text = __('using Stripe', 'woocommerce');
            }
    
            if ( isset($payment_method_text) ) {
                $button_text = sprintf( '%s %s %s', $pay_order_text, $cart_total_string, $payment_method_text );
            }
        }
        return $button_text;
    }
    
    // 在支付方式更改时更新结账(jQuery)
    add_action( 'woocommerce_checkout_init', 'trigger_update_checkout_on_payment_method_change' );
    function trigger_update_checkout_on_payment_method_change(){
        wc_enqueue_js("$('form.checkout').on( 'change', 'input[name=payment_method]', function(){
            $(document.body).trigger('update_checkout');
        });");
    }
    

    或者也可以使用WC_Payment_Gatewayorder_button_text属性,如下所示:

    add_filter('woocommerce_available_payment_gateways', 'change_payment_text_button');
    function change_payment_text_button( $payment_gateways ) {
        if ( is_checkout() && ! is_wc_endpoint_url() ) {
            $cart_total_string = strip_tags( WC()->cart->get_total() ); // 获取订单总额字符串
            $pay_order_text    = __('Order &amp; Pay', 'woocommerce'); // 下单按钮文本
    
            if ( isset($payment_gateways['bacs']) ) {
                $payment_gateways['bacs']->order_button_text = sprintf( '%s %s %s', 
                    $pay_order_text, $cart_total_string, __('using WireTransfer', 'woocommerce') );
            } 
            if ( isset($payment_gateways['cheque']) ) {
                $payment_gateways['cheque']->order_button_text = sprintf( '%s %s %s', 
                    $pay_order_text, $cart_total_string, __('with a personal cheque', 'woocommerce') );
            } 
            if ( isset($payment_gateways['cod']) ) {
                $payment_gateways['cod']->order_button_text = sprintf( '%s %s %s', 
                    $pay_order_text, $cart_total_string, __('on delivery', 'woocommerce') );
            }
            if ( isset($payment_gateways['etco']) ) {
                $payment_gateways['etco']->order_button_text = sprintf( '%s %s %s', 
                    $pay_order_text, $cart_total_string, __('using EtCo', 'woocommerce') );
            }
            if ( isset($payment_gateways['stripe']) ) {
                $payment_gateways['stripe']->order_button_text = sprintf( '%s %s %s', 
                    $pay_order_text, $cart_total_string, __('using Stripe', 'woocommerce') );
            }
        }
        return $payment_gateways;
    }
    

    将代码放在你的子主题的functions.php文件中(或插件中)。经过测试,可以正常工作。

    Antwort
    0
  • StornierenAntwort