php - In Woocommerce werden Ajaxify-Header-Warenkorb-Artikel gezählt




jquery wordpress (2)

Ich erstelle ein benutzerdefiniertes, in Woocommerce integriertes Theme für WordPress.

Ich habe oben einen Blob, der die Gesamtzahl der Artikel im Warenkorb anzeigt. Ich möchte diesen Blob mit Jquery aktualisieren (ohne die Seite neu zu laden) Blob und erhöhen Sie es um +1 für jeden Klick, das Problem ist der Warenkorb hat eine Option, um die Anzahl der Artikel auszuwählen, die Sie dem Warenkorb hinzufügen möchten. Wenn ich also 3 Elemente auswähle und auf die Schaltfläche klicke, wird der Blob nur um eins erhöht.

Ich kann eine Methode erstellen, um die Anzahl der Elemente zu ermitteln, die über das Front-End hinzugefügt werden, halte dies jedoch für unnötig. Ich möchte in der Lage sein, die Gesamtanzahl von PHP-Sitzungen mit jquery abzurufen, damit ich bei jedem Klick auf "Element hinzufügen" oder "Element entfernen" die aktuelle Nummer dynamisch vom Server abrufen kann.

Bisher habe ich eine reloadCart.php-Datei erstellt, die die Gesamtsumme des Einkaufswagens wiedergibt. Hier ist der Code

<?php
require('../../../wp-blog-header.php');
global $woocommerce;
echo $woocommerce->cart->get_cart_contents_count();
?>

Wenn ich diese Seite besuche, werden die aktuellen Artikelsummen angezeigt, aber ich kann diese Daten nicht aus jquery abrufen. Es ist schon einige Zeit her, dass ich AJAX das letzte Mal verwendet habe AJAX-Anruf, den ich mache, ist richtig.

Ich habe versucht, die Funktionen get () und post () von jquery sowie die normale Funktion ajax () zu verwenden, aber nichts scheint zu funktionieren. Kann jemand bitte helfen?

$(".ajax_add_to_cart").click(function () {
   /*$("#bag-total").html(function () {
        var bagTotal = parseInt($(this).html());
        return ++bagTotal;
    });*/
    alert('clicked');
    $.get("<?php echo get_template_directory_uri(); ?>/reloadCart.php", function(data){
        alert("Data: " + data);
    });
}); 

Die Zeilen, die kommentiert werden, sind diejenigen, die ich zuvor verwendet habe, um den Gesamtbetrag des Einkaufswagens zu addieren, indem ich die aktuelle Einkaufswagennummer vom Front-End erhalte.

Jede Hilfe wäre dankbar. Danke im Voraus!


Für alle, die die richtige Ajax-Implementierung wünschen, ist hier der richtige Weg.

in functions.php

add_action('wp_ajax_cart_count_retriever', 'cart_count_retriever');
add_action('wp_ajax_nopriv_cart_count_retriever', 'cart_count_retriever');
function cart_count_retriever() {
    global $wpdb;
    echo WC()->cart->get_cart_contents_count();
    wp_die();
}

In Ihrer Skriptdatei (vorausgesetzt, Sie haben die Skriptdatei in ein setInterval eingefügt und das Ajax-Objekt an das Skript übergeben. Sie müssen diesen Block auch in ein setInterval oder in eine andere jquery-Aktion einfügen.

var data = {
  'action': 'cart_count_retriever'
};
jQuery.post(ajax_object.ajax_url, data, function(response) {
  alert('Got this from the server: ' + response);
});

Ich habe noch nie Woocommerce verwendet, aber eine ziemlich einfache Option, wenn Sie in Ihrem Beitrag sagen:

Wenn ich diese Seite besuche, werden die Gesamtsummen des aktuellen Elements angezeigt, aber ich kann diese Daten nicht von JQuery abrufen

... würde darin bestehen, eine benutzerseitige JavaScript-Variable für die Anzeige zu verwenden und dann einfach die PHP-Aktualisierungsmethoden aufzurufen, um Artikel mit AJAX zu Ihrem Einkaufswagen hinzuzufügen (was ich unten nicht zeige, weil Sie diesen Code nicht angegeben haben).

<?php
    //hardcoded value for $woocommerce->cart->get_cart_contents_count()
    $woocommerce = 59;
?>
<button class="ajax_add_to_cart">Add to cart</button>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    //user sided variable for PHP value
    var total = parseInt($(".totalCost").text()); 
    $(".ajax_add_to_cart").click(function(){
        total++;                     //add to cart
        $(".totalCost").text(total); //update
    });
});
</script>

<p class="totalCost">
    <?php echo json_encode($woocommerce); ?>
</p>

Sie können dieses Snippet kopieren und testen unter: http://phpfiddle.org/

Grundsätzlich habe ich im obigen Code den PHP-Wert als Absatztext beim Laden der Seite festgelegt und dann diesen Wert in eine JS-Variable eingelesen, um mit den Daten auf der Clientseite der Anwendung herumzuspielen, und dann den Anzeigetext nach Bedarf aktualisiert.







woocommerce