Frontend-JS für Woocommerce Checkout überschreiben

Lesezeit: 2 Minuten

Benutzer-Avatar
Josh Rives

Ich muss die Felder für Rechnungsadresse, Stadt, Bundesland und Postleitzahl ausblenden, wenn die Checkout-Seite geladen wird, um unser Adressvalidierungsskript verwenden zu können. Der folgende Code erreicht, was wir wollen, aber er tut es zu spät im Prozess. Sie sehen die Felder, bis es läuft updated_checkout Ereignis, das zu spät im Prozess ist. Läuft aber weiter init_checkout scheint zu früh zu sein, da etwas anderes die Anzeige dieser Felder erzwingt. Gibt es etwas dazwischen init_checkout und updated_checkout auf die ich achten sollte?

jQuery( "body" ).on( "updated_checkout", function() {
  jQuery("#billing_country_field,
  #billing_address_1_field
  #billing_address_2_field,
  #billing_city_field,
  #billing_state_field,
  #billing_postcode_field").css("display", "none");
});

  • Ihre Funktionalität bei beiden Ereignissen aufrufen? jQuery( "body" ).on( "init_checkout updated_checkout", function(){ ...

    – George

    13. Oktober 2017 um 15:07 Uhr


  • Das Problem ist, dass es nicht funktionieren wird init_checkout da es anscheinend etwas anderes gibt, das die Felder danach anzeigt.

    – Josh Rives

    13. Oktober 2017 um 15:30 Uhr

  • Hier ist eine Demo zum Laden der Seite. dropbox.com/s/f0b6ec7v3meje67/checkout.gif?dl=0

    – Josh Rives

    13. Oktober 2017 um 15:36 Uhr

  • Warum nicht einfach das Skript über wp_enqueue_scripts laden? Ich habe andere Adress-Plugins gesehen, die dies tun, und es funktioniert, um die Felder auszublenden.

    – Andreas Schultz

    14. Oktober 2017 um 6:33 Uhr

Da das DOM zum ersten Mal geladen wird, werden die Felder trotzdem angezeigt.

Ich habe es mit allen verfügbaren Javascript-Ereignissen versucht, die von “body” delegiert wurden: added_to_cart adding_to_cart change click country_to_state_changed country_to_state_changing init_checkout update_checkout updated_wc_div wc_fragment_refresh wc_fragment_refreshed. Die Felder erscheinen immer ein wenig.

Die einzige Möglichkeit besteht darin, das Checkout-Formular beim Laden mit einigen CSS-Regeln auszublenden, die Sie Ihrem aktiven Design hinzufügen styles.css Datei:

form.checkout.woocommerce-checkout{
    visibility:hidden;
    opacity:0;
}

Und ein bisschen jQuery, das zuerst Ihre Felder ausblendet, bevor das Checkout-Formular angezeigt wird:

add_filter( 'wp_footer', 'custom_checkout_script' );
function custom_checkout_script( ){
    if( ! is_checkout() ) return;
    ?>
    <script type="text/javascript">
    jQuery(function($){
        var events="update_checkout",
            billingFields="#billing_country_field,#billing_address_1_field,#billing_address_2_field";
        billingFields += ',#billing_city_field,#billing_state_field,#billing_postcode_field';

        $('body').on( events, function(){
            $(billingFields).hide( 0,function(){
                $('form.checkout.woocommerce-checkout').css('visibility','visible').fadeIn({ duration: 1000 });
            });
        });
    });
    </script>
    <?php
}

Dieser Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Der gesamte Code wurde auf Woocommerce 3+ getestet und funktioniert.

  • Obwohl dies das Problem nicht löst, scheint es im Moment die beste Option zu sein. Vielen Dank

    – Josh Rives

    16. Oktober 2017 um 20:11 Uhr

1032590cookie-checkFrontend-JS für Woocommerce Checkout überschreiben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy