php - أجاكسيفي البنود عربة رأس في Woocommerce




jquery ajax (2)

لأي شخص يريد التنفيذ الصحيح لأجاكس ، إليك الطريقة التي يجب اتباعها.

في وظائف

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 موضوع متكامل لورد.

لدي نقطة في الأعلى تعرض إجمالي عدد العناصر في السلة ، أريد تحديث هذه النقطة باستخدام Jquery (بدون إعادة تحميل الصفحة) تمكنت من زيادة عدد العناصر عن طريق الحصول على الرقم الحالي في blob وزيادتها بمقدار +1 لكل نقرة ، والمشكلة هي أن الإضافة إلى العربة لديها خيار لتحديد عدد العناصر التي تريد إضافتها إلى العربة. لذلك إذا قمت باختيار 3 عناصر وانقر فوق الزر ، فإن النقطة ستزيد بمقدار واحد فقط.

يمكنني إنشاء طريقة للحصول على عدد العناصر التي تتم إضافتها من الواجهة الأمامية ولكن أعتقد أنها غير ضرورية. أريد أن أكون قادرًا على الحصول على العدد الإجمالي من جلسات PHP باستخدام jquery بحيث تحصل على الرقم الحالي ديناميكيًا من الخادم عند كل نقرة لإضافة عنصر أو إزالة عنصر.

ما قمت به حتى الآن هو إنشاء ملف reloadCart.php يردد إجمالي العربة ، إليك الرمز

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

عندما أقوم بزيارة هذه الصفحة ، فإنه يعكس مجاميع العناصر الحالية ، لكن لا يمكنني الحصول على هذه البيانات من مسج ، فقد كان منذ وقت ما استخدمت AJAX آخر ، كما أنني لم أعمل على مشاريع الويب لفترة طويلة جدًا ، لكن مع ما أتذكره ، أجاكس الدعوة التي أجريها هو الصحيح.

لقد حاولت استخدام الدالتين get () و post () من jquery بالإضافة إلى وظيفة 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 من قبل ولكن خيار واحد بسيط للغاية عندما تقول في رسالتك:

عندما أقوم بزيارة هذه الصفحة ، فإنها تعكس مجاميع العناصر الحالية ، لكن لا يمكنني الحصول على هذه البيانات من JQuery

... سيكون استخدام متغير JavaScript من جانب المستخدم للعرض ، ثم اتصل فقط بطرق تحديث PHP لإضافة عناصر إلى سلة التسوق الخاصة بك باستخدام AJAX (التي لا أعرضها أدناه لأنك لم تقدم هذا الرمز).

<?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 للتجول بها مع البيانات الموجودة على جانب العميل من التطبيق ثم أقوم بتحديث نص العرض حسب الحاجة.





woocommerce