חיפוש ]

כפתור Ajax 'הוסף לעגלה' בעמוד מוצר יחיד של ווקומרס

כברירת מחדל, ווקומרס משתמשת ב-AJAX להוספת מוצרים לעגלה בעמודי ארכיון ללא טעינת עמוד מחדש. אך כפתור ההוספה לעגלה בעמוד מוצר יחיד מבצע רענון מלא של העמוד.

מדריך זה מראה כיצד להפעיל הוספה לעגלה באמצעות AJAX בעמודי מוצר יחיד של ווקומרס באמצעות JavaScript מותאם ודריסת תבנית.

אם אינכם מבינים מה זה Ajax, אז לצורך העניין הכוונה היא להוסיף את המוצר לעגלה ללא רענון של העמוד.

שימו לב: החל מווקומרס 7.8, cart fragments מושבתים כברירת מחדל ונטענים רק כאשר ווידג'ט עגלה מוצג בעמוד. ודאו שהתבנית שלכם כוללת ווידג'ט עגלה או שהסקריפט wc-cart-fragments נטען. כמו כן, גישה זו עובדת עבור מוצרים פשוטים. מוצרים משתנים דורשים טיפול נוסף בבחירת תכונות.

שלב 1: JavaScript להוספה לעגלה באמצעות AJAX

ראשית, הגדירו את תצורת רענון ה-fragments, ואז צרפו את מטפל שליחת הטופס. ודאו שהסקריפט נטען עם wc-cart-fragments כתלות:

// Fragment refresh configuration
var $warp_fragment_refresh = {
    url: wc_cart_fragments_params.wc_ajax_url.toString().replace('%%endpoint%%', 'get_refreshed_fragments'),
    type: 'POST',
    success: function (data) {
        if (data && data.fragments) {
            $.each(data.fragments, function (key, value) {
                $(key).replaceWith(value);
            });
            $(document.body).trigger('wc_fragments_refreshed');
        }
    }
};

// AJAX add to cart on single product page
$('.entry-summary form.cart').on('submit', function (e) {
    e.preventDefault();
    var this_button = $('.single_add_to_cart_button');
    this_button.block({
        message: null,
        overlayCSS: {
            background: '#fff', opacity: 0.6
        }
    });
    var product_url = window.location,
        form = $(this);
    $.post(product_url, form.serialize() + '&_wp_http_referer=' + product_url, function (result) {
        var cart_dropdown = $('.widget_shopping_cart', result);
        // Update dropdown cart
        $('.widget_shopping_cart').replaceWith(cart_dropdown);
        // Refresh cart fragments
        $.ajax($warp_fragment_refresh);
        this_button.unblock();
    }).fail(function () {
        this_button.unblock();
    });
});

הוסיפו קוד זה לקובץ JavaScript וטענו אותו בתבנית עם wc-cart-fragments כתלות:

wp_enqueue_script( 'ajax-add-to-cart', get_stylesheet_directory_uri() . '/js/ajax-add-to-cart.js', array( 'jquery', 'wc-cart-fragments' ), '1.0', true );

שלב 2: דריסת תבנית כפתור ההוספה לעגלה

השלב השני הוא לדרוס את התבנית האחראית לכפתור ההוספה לעגלה. פעולה זו מעבירה את ערך ה-add-to-cart לשדה מוסתר כדי שה-JavaScript יוכל ליירט את שליחת הטופס.

העתיקו את הקובץ הנמצא במיקום הבא:

plugins/woocommerce/templates/single-product/add-to-cart/simple.php

לתבנית שלכם במיקום הבא:

themes/your theme name/woocommerce/single-product/add-to-cart/simple.php

זהו התהליך הסטנדרטי לדריסת תבניות ווקומרס. לאחר כל עדכון של ווקומרס, השוו את הקובץ הדרוס שלכם עם המקור כדי לוודא תאימות. גרסת התבנית מצוינת בראש כל קובץ.

כעת החליפו את השורה:

<button type="submit" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>

בקוד הבא:

<input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>" />

<button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>

שאלות נפוצות

האם זה עובד עם מוצרים משתנים (Variable Products)?
מימוש זה מיועד למוצרים פשוטים. מוצרים משתנים דורשים טיפול נוסף לסריאליזציה של ערכי התכונות הנבחרות (כמו מידה וצבע) ושימוש בתבנית variable.php במקום simple.php. סריאליזציית הטופס ב-JavaScript תופסת את הנתונים, אך יש צורך לדרוס גם את תבנית המוצר המשתנה.
למה צריך לדרוס את תבנית ווקומרס?
כפתור ההוספה לעגלה כולל את מזהה המוצר בתכונת name שלו, מה שגורם לשליחת טופס רגילה (רענון עמוד מלא). על ידי העברת מזהה המוצר לשדה input מוסתר, ניתן ליירט את הטופס באמצעות JavaScript לשליחת AJAX תוך העברת הנתונים הנדרשים לווקומרס.
מה הם WooCommerce cart fragments?
Cart fragments הם חלקי HTML קטנים שווקומרס משתמשת בהם לעדכון ווידג'ט העגלה, ספירת הפריטים וסכומי העגלה ללא טעינת עמוד מלאה. נקודת הקצה get_refreshed_fragments מחזירה HTML מעודכן לכל ה-fragments הרשומים, שמוחלפים בעמוד באמצעות JavaScript. החל מווקומרס 7.8, סקריפט ה-fragments נטען רק כאשר ווידג'ט עגלה קיים בעמוד.
האם דריסת התבנית תישבר אחרי עדכון ווקומרס?
ייתכן. ווקומרס עשויה לעדכן את התבניות שלה בגרסאות מרכזיות. לאחר עדכון, בדקו את עמוד הסטטוס של ווקומרס (ווקומרס > סטטוס > תבניות) כדי לראות אם תבניות שדרסתם מיושנות. אם כן, השוו את הגרסה שלכם עם המקור החדש והחילו את השינויים הנדרשים.
ספירת העגלה לא מתעדכנת אחרי הוספת מוצר. מה לבדוק?
ודאו שסקריפט wc-cart-fragments נטען כתלות של קובץ ה-JavaScript שלכם. ודאו שהתבנית כוללת ווידג'ט עגלה (נדרש מווקומרס 7.8 לטעינת fragments). כמו כן בדקו שתוספי caching לא מגישים גרסה מטומנת של נקודת הקצה של cart fragments.

סיכום

הפעלת הוספה לעגלה באמצעות AJAX בעמודי מוצר יחיד של ווקומרס דורשת שני שלבים: מטפל JavaScript שמיירט את שליחת הטופס ומרענן cart fragments, ודריסת תבנית שמעבירה את מזהה המוצר לשדה input מוסתר.

זכרו לטעון את הסקריפט עם wc-cart-fragments כתלות, ותמיד בדקו את דריסות התבניות לאחר עדכוני ווקומרס. להרחבה על התאמת ווקומרס, ראו את המדריך שלנו על הוקים של ווקומרס.

דיון ותגובות
5 תגובות  ]

השאירו תגובה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...

Savvy WordPress Development official logo