Modifiez le texte du bouton « Payer maintenant » sur la page de paiement WooCommerce pour qu'il corresponde à l'option de passerelle de paiement
P粉395056196
P粉395056196 2023-08-16 14:51:27
0
1
739
<p>J'essaie depuis des heures maintenant et de toute façon, je n'arrive pas à faire fonctionner cette chose "de base". </p> <p>J'ai plusieurs passerelles de paiement disponibles et je dois inclure leurs noms (y compris le montant total de la commande) dans le texte du bouton « Payer maintenant ». </p> <p><strong>Exemple</strong> : "<code>Utilisez Stripe pour payer la commande de 49 $</code>"</p> <p>J'ai un morceau de code censé mettre automatiquement à jour la caisse lors du changement de passerelle.S'il vous plaît, quelqu'un peut-il m'aider ? </p> <pre class="brush:php;toolbar:false;">add_filter( 'woocommerce_order_button_text', 'order_button_text_based_on_gateway', 10, 1 ); fonction order_button_text_based_on_gateway( $cart ) { // Assurez-vous que nous obtenons la passerelle de paiement $payment_method = WC()->session->get( 'chosen_payment_method' ); // Basé sur différentes passerelles, afficher un texte de bouton différent (bouton de commande) if ( $payment_method == 'bacs' ) { return sprintf( '%s %s', __('Passer la commande et payer', 'woocommerce'), strip_tags( WC()->cart->get_total() ) 'Utiliser WireTransfer' ); } elseif ( $payment_method == 'chèque' ) { return sprintf( '%s %s', __('Passer la commande et payer', 'woocommerce'), strip_tags( WC()->cart->get_total() ) 'Utiliser un chèque personnel' ); } elseif ( $payment_method == 'cod') { return sprintf( '%s %s', __('Passer la commande et payer', 'woocommerce'), strip_tags( WC()->cart->get_total() ) 'Paiement à la livraison' ); } elseif ( $payment_method == 'etco') { return sprintf( '%s %s', __('Passer la commande et payer', 'woocommerce'), strip_tags( WC()->cart->get_total() ) 'Utiliser EtCo' ); } else ( $payment_method == 'bande' ) { return sprintf( '%s %s', __('Passer la commande et payer', 'woocommerce'), strip_tags( WC()->cart->get_total() ) 'Utiliser Stripe' ); } }</pré> <p><strong>Script de paiement de mise à jour automatique : </strong></p> <pre class="brush:php;toolbar:false;">add_action( 'wp_footer', 'reload_checkout_based_on_gateway_change', 999 ); fonction reload_checkout_based_on_gateway_change() { if ( is_checkout() && ! is_admin() ) { // Fin de PHP et démarrage de SCRIPT ?> <script> ( fonction( $ ) { $( 'form.checkout' ).on( 'change', 'input[name^="payment_method"]', function() { $( 'body' ).trigger( 'update_checkout' ); } ); } ) (jQuery); </script> <?php } }</pré> <p><br /></p>
P粉395056196
P粉395056196

répondre à tous(1)
P粉594941301

Il y a beaucoup d'erreurs dans votre code :

  • L'erreur principale concerne les chaînes : 'cheque''cheque'il s'agit de deux chaînes différentes.
    Donc, parmi toutes les instructions if, aucun des modes de paiement ne correspond.
  • Une autre erreur est que elsene prend en charge aucun paramètre de condition.

Il existe plusieurs façons de modifier le texte du bouton « Passer la commande » :

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');
    });");
}

Ou vous pouvez également utiliser l'attribut WC_Payment_Gatewayorder_button_text, comme indiqué ci-dessous :

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;
}

Placez le code dans le fichier function.php de votre thème enfant (ou dans un plugin). Il a été testé et fonctionne bien.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!