JS-Warnung bei Ajax-Hinzufügen zum Warenkorb für die Anzahl der bestimmten Produktkategorien in Woocommerce

Lesezeit: 4 Minuten

In Woocommerce versuche ich, einen JavaScript “Sweet Alert” anzuzeigen, wenn eine bestimmte Anzahl von Produkten im Warenkorb aus einer bestimmten Kategorie erreicht wird. Artikel werden dem Warenkorb über AJAX hinzugefügt, weshalb ich eine JavaScript-Benachrichtigung (Sweet alert) verwenden möchte.

zB IF-Wagen enthält 5 Produkte aus Kategorie “Taschen” – Alarm anzeigen.

Ich habe recherchiert und die folgenden hilfreichen Antworten gefunden und sie zum Erstellen meines Codes verwendet. Ich kämpfe jedoch damit, die Regel nur anzuwenden Produkte aus einer bestimmten Kategorie zählen.

  • Zeigen Sie eine süße Warnung auf AJAX zum Warenkorb hinzufügen für eine bestimmte Produktanzahl des Woocommerce-Warenkorbs an
  • Zählen von Warenkorbartikeln einer bestimmten Produktkategorie

Im Moment wird der unten stehende Code erfolgreich ausgelöst, jedoch nur basierend auf der Anzahl der Produkte im Warenkorb. Es ignoriert die Produktkategorie Regel:

Warenkorbartikel durchlaufen und den Produktkategoriezähler setzen:

// WordPress Ajax: Get different cart items count
add_action( 'wp_ajax_nopriv_checking_items', 'checking_items' );
add_action( 'wp_ajax_checking_items', 'checking_items' );
function checking_items() {

  global $woocommerce, $product;
                $i=0;         
                // Set minimum product cart total
                $total_bags = 0;
                $total_shoes = 0;

    if( isset($_POST['added'])){
        // Loop through cart for product category
        foreach ( $woocommerce->cart->cart_contents as $product ) :
                    if ( has_term( 'bags', 'product_cat', $product['22'] ) ) {
                       $total_bags += $product['quantity'];
                    } else {
                       $total_shoes += $product['quantity'];
                    }
                endforeach;
    }
    die(); // To avoid server error 500
}

Wenn die Anzahl der Kategorien bei Verwendung von jQuery erfüllt ist, wird eine JavaScript-Warnung angezeigt.

 // The Jquery script
add_action( 'wp_footer', 'item_check' );
function item_check() {
    ?>
    <script src="https://unpkg.com/[email protected]/dist/sweetalert2.all.js"></script>
    <script type="text/javascript">
    jQuery( function($){
        // The Ajax function
        $(document.body).on('added_to_cart', function() {
            console.log('event');
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: {
                    'action': 'checking_cart_items',
                    'added' : 'yes'
                },
              //ONLY DISPLAY ALERT IF TOTAL ITEMS IS FROM CATEGORY BAGS
                success: function ($total_bags) {
                    if($total_bags == 5 ){
//DISPLAY JAVASCRIPT ALERT
const toast = swal.mixin({
  toast: true,
  showConfirmButton: false,
  timer: 3000
});
toast({
  type: 'success',
  title: '5 Items Added!'
})
                    }
                }
            });
        });
    });
    </script>
    <?php
}

  • Hmm… Sie geben nichts von der Funktion “checking_items()” zurück

    – funkysoul

    27. Mai 2018 um 15:56 Uhr


  • Muss ich die Variable explizit zurückgeben? … Ich habe versucht, hinzuzufügen return $total_bags; nach dem IF in der Funktion, aber schien das Verhalten der nicht zu ändern checking_items() Funktion

    Benutzer4752139

    27. Mai 2018 um 16:04 Uhr

JS Warnung bei Ajax Hinzufugen zum Warenkorb fur die Anzahl der bestimmten
LoicTheAztec

Es gibt einige Fehler und Fehler in Ihrem Code. Versuchen Sie stattdessen diesen überarbeiteten Code:

// WordPress Ajax: Get different cart items count
add_action( 'wp_ajax_nopriv_checking_items', 'checking_cart_items' );
add_action( 'wp_ajax_checking_items', 'checking_cart_items' );
function checking_cart_items() {
    if( isset($_POST['id']) && $_POST['id'] > 0 ){
        // Initialising variables
        $count      = 0;
        $product_id = $_POST['id'];
        $category   = 'bags';
        $category   = 't-shirts';

        // Loop through cart for product category
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            if ( has_term( $category, 'product_cat', $cart_item['product_id'] ) ) {
               $count += $cart_item['quantity'];
            }
        }

        // Only if the added item belongs to the defined product category
        if( has_term( $category, 'product_cat', $_POST['id'] ) )
            echo $count; // Returned value to jQuery
    }

    die(); // To avoid server error 500
}

// The Jquery script
add_action( 'wp_footer', 'items_check' );
function items_check() {
    if(is_checkout()) return; // Except on checkout page
    ?>
    <script src="https://unpkg.com/[email protected]/dist/sweetalert2.all.js"></script>
    <script type="text/javascript">
    jQuery( function($){
        // wc_add_to_cart_params is required to continue
        if ( typeof wc_add_to_cart_params === 'undefined' )
            return false;

        $(document.body).on( 'added_to_cart', function( event, fragments, cart_hash, $button ) {
            // The Ajax request
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: {
                    'action': 'checking_items',
                    'id'    : $button.data( 'product_id' ) // Send the product ID
                },
              //ONLY DISPLAY ALERT IF TOTAL ITEMS IS FROM CATEGORY BAGS
                success: function (response) {
                    console.log('response: '+response); // Testing: to be removed
                    if(response == 5 ){
                        //DISPLAY JAVASCRIPT ALERT
                        const toast = swal.mixin({
                          toast: true,
                          showConfirmButton: false,
                          timer: 3000
                        });
                        toast({
                          type: 'success',
                          title: '5 Items Added!'
                        })
                    }
                }
            });
        });
    });
    </script>
    <?php
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie sich Ihre Browser-Inspektor-Javascript-Konsole ansehen, werden Sie sehen, dass Ajax richtig funktioniert und jedes Mal zurückkehrt, wenn die Elemente für diese bestimmte Produktkategorie zählen:

Geben Sie hier die Bildbeschreibung ein

  • Danke @LoicTheAztec, ich habe den obigen Code ausprobiert, aber er scheint bei mir nicht zu funktionieren? Die Artikel wurden erfolgreich in den Warenkorb gelegt, es wird jedoch nichts ausgelöst. Ich habe den Inspektor angeschaut und ich bekomme admin-ajax.php - 400 Bad Request Ich erhalte diesen Fehler nicht, wenn der Code deaktiviert ist … Ich habe diesen Fehler noch nie gesehen?

    Benutzer4752139

    27. Mai 2018 um 17:28 Uhr

  • @TheNattyProfessor Ich habe den Code gerade noch einmal getestet, und er funktioniert perfekt … Es gibt also noch etwas anderes wie andere Codeanpassungen, etwas in Ihrem Design oder ein Plugin, das widersprüchlich ist.

    – LoicTheAztec

    27. Mai 2018 um 17:35 Uhr

  • Blöder Fehler, es war nur mein Tippfehler im Code – obiges Beispiel funktioniert jetzt! Nur eine Frage, es wird nicht berücksichtigt, ob es eine zweite Kategorie gibt? z.B IF category == bags, display alert 1....IF category == shoes, display alert 2

    Benutzer4752139

    27. Mai 2018 um 18:21 Uhr

  • Ich habe hier eine neue Frage veröffentlicht und auch die Links in meiner Frage hier positiv bewertet. Danke für Ihre Hilfe 🙂

    Benutzer4752139

    27. Mai 2018 um 18:52 Uhr

924250cookie-checkJS-Warnung bei Ajax-Hinzufügen zum Warenkorb für die Anzahl der bestimmten Produktkategorien in Woocommerce

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

Privacy policy