Fügen Sie in der WooCommerce-Kaufabwicklung eine Body-Klasse für eine bestimmte ausgewählte Versandmethode hinzu

Lesezeit: 2 Minuten

Benutzeravatar von Rob
rauben

Bezogen auf Fügen Sie eine Körperklasse für eine bestimmte ausgewählte Versandoption in der Woocommerce-Kaufabwicklung hinzu Antwortcode, ich verwende seit einiger Zeit den folgenden Codeschnipsel:

add_filter( 'wp_footer','weekend_selected' );
function weekend_selected(){
    if( ! is_page( 8 ) ) return; // only on checkout

    $method_id = "''";
    // Find the Shipping Method ID for the Shipping Method label name 'Delivery price on request'
    foreach( WC()->session->get('shipping_for_package_0')['rates'] as $rate_key => $rate ){
        if( 'Saturdays DPD' == $rate->label ){
            $method_id = $rate_key;
            break;
        }
    }
    ?>
        <script type="text/javascript">
            (function($){
                // variables initialization
                var a="input[name^="shipping_method[0]"]",
                    b = a+':checked',
                    c="weekend-selected",
                    d = '<?php echo $method_id; ?>';

                if( $(b).val() == d )
                    $('body').addClass(c);
                else
                    $('body').removeClass(c);

                $( 'form.checkout' ).on( 'change', a, function() {
                    if( $(b).val() == d )
                        $('body').addClass(c);
                    else
                        $('body').removeClass(c);
                });
            })(jQuery);
        </script>
    <?php
}

Ich habe jedoch festgestellt, dass es beim Laden der Seite nicht mehr ausgelöst wird. Ich muss die Seite aktualisieren, damit es ausgelöst wird, was es unbrauchbar macht.

Der Anwendungsfall besteht im Wesentlichen darin, ein Body-Tag (am Wochenende ausgewählt) zu laden, das dann (mit CSS) bestimmte Tage in einem Kalender verbirgt.

Zuerst dachte ich, es läge daran, dass die Versandoptionen nicht geladen wurden, bevor eine Adresse hinzugefügt wurde, also habe ich die erforderlichen Adressfelder vorausgefüllt, um zu sehen, ob dies das Problem war, aber das Gleiche passiert, ich muss die Seite aktualisieren, damit der Code ausgelöst wird.

Benutzeravatar von LoicTheAztec
LoicTheAztec

Probieren Sie die folgende einfache und leichte Methode aus (ohne Verwendung von Jquery):

add_filter( 'body_class', 'add_shipping_classes_to_body_class' );
function add_shipping_classes_to_body_class( $classes ) {
    // only on checkout page
    if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) 
        return; 
        
    $chosen_method  = WC()->session->get('chosen_shipping_methods')[0];
    $shipping_rates = WC()->session->get('shipping_for_package_0')['rates'];
   
    if( 'Saturdays DPD' === $shipping_rates[$chosen_method]->label ){
        $classes[] = 'weekend-selected';
    }
    return $classes;
}

Der Code wird in die Datei functions.php des aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Es sollte besser funktionieren.

Verwandt: Versandklasse zur Körperklasse auf der WooCommerce-Checkout-Seite hinzufügen

  • Vielen Dank. Ich bekomme nur einen Fehler in Zeile 10 – ‘break’ nicht im Kontext ‘loop’ oder ‘switch’

    – Rauben

    13. Februar 2021 um 15:37 Uhr

  • Danke, ich habe die Zeile entfernt if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return; da es Probleme macht. Abgesehen davon funktioniert es gut.

    – Rauben

    13. Februar 2021 um 15:51 Uhr

  • Entschuldigung, ich habe nicht gesagt, dass Ihr Code nicht funktioniert, nur dass diese Zeile mit etwas auf der Website in Konflikt steht. Ich werde es akzeptieren. Vielen Dank.

    – Rauben

    13. Februar 2021 um 15:57 Uhr

1426560cookie-checkFügen Sie in der WooCommerce-Kaufabwicklung eine Body-Klasse für eine bestimmte ausgewählte Versandmethode hinzu

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

Privacy policy