php वोकॉमर्स में हेडर कार्ट आइटम की गणना करें




jquery ajax (3)

मैं WordPress के लिए एक कस्टम woocommerce एकीकृत विषय बना रहा हूं।

मेरे पास शीर्ष पर एक बूँद है जो गाड़ी में कुल वस्तुओं को प्रदर्शित करता है, मैं इस बूँद को Jquery (w / o पृष्ठ को पुनः लोड करना) का उपयोग करके अद्यतन करना चाहता हूं मैं वर्तमान संख्या प्राप्त करके वस्तुओं की संख्या बढ़ाने में सक्षम था। बूँदें और प्रत्येक क्लिक के लिए इसे 1 से बढ़ाना, समस्या यह है कि कार्ट में जोड़ें उन कार्ट की संख्या का चयन करने का विकल्प है जिन्हें आप कार्ट में जोड़ना चाहते हैं। इसलिए अगर मैं 3 आइटम का चयन करता हूं और बटन पर क्लिक करता हूं तो बूँद केवल एक बढ़ जाती है।

मैं सामने वाले छोर से जोड़े जा रहे आइटमों की संख्या प्राप्त करने का एक तरीका बना सकता हूं लेकिन मुझे लगता है कि यह अनावश्यक है। मैं jquery का उपयोग करके PHP सत्रों से कुल संख्या प्राप्त करने में सक्षम होना चाहता हूं ताकि आइटम जोड़ने या हटाने वाले आइटम के प्रत्येक क्लिक पर मुझे सर्वर से वर्तमान संख्या गतिशील रूप से मिल जाए।

मैंने अब तक जो भी किया है, वह reloadCart.php फ़ाइल बनाने के लिए है, जो गाड़ी को कुल मिलाकर इको कोड में बदल देती है

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

जब मैं इस पृष्ठ पर जाता हूं तो यह मौजूदा आइटम योगों को दर्शाता है, लेकिन मुझे यह डेटा jquery से मिलता है, यह कुछ समय से है जब मैंने आखिरी बार AJAX का उपयोग किया था, मैंने बहुत लंबे समय तक वेब परियोजनाओं पर काम नहीं किया है, लेकिन मुझे जो याद है, उसके साथ AJAX कॉल जो मैं कर रहा हूं वह सही है।

मैंने प्राप्त () और पोस्ट () कार्य के साथ-साथ सामान्य अजाक्स () फ़ंक्शन का उपयोग करने की कोशिश की है, लेकिन कुछ भी काम नहीं करता है। क्या कोई मदद कर सकता है?

$(".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);
    });
}); 

जिन पंक्तियों पर टिप्पणी की गई है, वे वही हैं जिनका मैं पहले उपयोग कर रहा था, सामने की ओर से वर्तमान कार्ट संख्या प्राप्त करके गाड़ी को जोड़ने के लिए।

किसी भी सहायता की सराहना की जाएगी। अग्रिम में धन्यवाद!


आपको कार्ट कंटेंट काउंट को अपडेट करने के लिए किसी भी रीलोड का उपयोग नहीं करना चाहिए … इसके बजाय आपको समर्पित woocommerce_add_to_cart_fragments एक्शन हुक का उपयोग करना चाहिए जो कि अजाक्स संचालित है

1) HTML को रीफ्रेश किया जाना है: इसलिए सबसे पहले अपने विषय के शीर्ष लेख में। फाइल में आपको विशिष्ट विशिष्ट टैग (या एक वर्ग) के साथ विशिष्ट HTML टैग में कार्ट काउंट को एम्बेड करने की आवश्यकता होगी, उदाहरण के लिए कुछ इस तरह:

?>
    <div id="mini-cart-count"></div>
<?php

या:

echo '<div id="mini-cart-count"></div>';

2) कोड:

add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_mini_cart_count');
function wc_refresh_mini_cart_count($fragments){
    ob_start();
    ?>
    <div id="mini-cart-count">
        <?php echo WC()->cart->get_cart_contents_count(); ?>
    </div>
    <?php
        $fragments['#mini-cart-count'] = ob_get_clean();
    return $fragments;
}

यदि आप अपने html टैग में एक वर्ग का उपयोग करते हैं, तो आप ['.mini-cart-count'] द्वारा ['.mini-cart-count'] ['#mini-cart-count'] ['.mini-cart-count'] । इस हुक का उपयोग मिनी-कार्ट सामग्री को ताज़ा करने के लिए भी किया जाता है।

कोड आपके सक्रिय चाइल्ड थीम (या थीम) या किसी भी प्लगइन फाइल में भी काम करता है।

कुछ वर्षों के बाद से global $woocommerce; + $woocommerce->cart पुराना है और WooCommerce कार्ट ऑब्जेक्ट तक पहुंचने के लिए WC()->cart द्वारा प्रतिस्थापित किया गया है।

यदि आपको उस गणना को ताज़ा करने के लिए jQuery की आवश्यकता है, तो आप wc_fragment_refresh या wc_fragments_refreshed प्रत्यायोजित घटनाओं की कोशिश कर सकते हैं, जैसे:

$(document.body).trigger('wc_fragment_refresh');

या:

$(document.body).trigger('wc_fragments_refreshed');

जब आप अपनी पोस्ट में कहते हैं तो मैंने इससे पहले woocommerce का उपयोग नहीं किया है, लेकिन एक बहुत ही सरल विकल्प

जब मैं इस पृष्ठ पर जाता हूं तो यह वर्तमान आइटम योगों को दर्शाता है, लेकिन मुझे यह डेटा JQuery से प्राप्त नहीं होगा

... प्रदर्शन के लिए उपयोगकर्ता-तरफा जावास्क्रिप्ट चर का उपयोग करना होगा, और फिर AJAX का उपयोग करके अपने कार्ट में आइटम जोड़ने के लिए बस PHP अपडेट विधियों को कॉल करें (जो मैं नीचे नहीं दिखाता क्योंकि आपने वह कोड प्रदान नहीं किया है)।

<?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>

आप इस स्निपेट को कॉपी और टेस्ट कर सकते हैं: http://phpfiddle.org/

मूल रूप से उपरोक्त कोड में, मैं PHP मान को पेज लोड पर एक पैरा टेक्स्ट के रूप में सेट करता हूं और फिर उस मूल्य को JS वेरिएबल में पढ़ता हूं जो एप्लिकेशन के क्लाइंट साइड पर डेटा के साथ गड़बड़ करने के लिए और फिर मैं आवश्यकतानुसार डिस्प्ले टेक्स्ट को अपडेट करता हूं।


जो कोई भी उचित अजाक्स कार्यान्वयन चाहता है, उसके लिए यहां जाने का तरीका है।

कार्यों में

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

अपनी स्क्रिप्ट फ़ाइल में (यह मानते हुए कि आपने स्क्रिप्ट फ़ाइल को जीत लिया है और स्क्रिप्ट में ajax ऑब्जेक्ट को पारित कर दिया है। आपको इस ब्लॉक को एक setInterval या किसी अन्य jquery कार्रवाई में डालने की आवश्यकता है।

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






woocommerce