WooCommerce יודע להפנות את הגולשים לעמוד עגלת הקניות (Cart Page) לאחר הוספת מוצר לעגלה, אך אין בו הגדרה שמפנה ישירות לעמוד התשלום (Checkout Page). לשם כך תצטרכו את הפילטר woocommerce_add_to_cart_redirect.
דילוג על עגלת הקניות הגיוני בחנויות שמוכרות מוצר אחד בכל פעם, כמו קורסים, מנויים או כרטיסים לאירועים. בסניפט הזה תמצאו את הקוד, את ההגדרה הרלוונטית, ואת כפתורי ה-AJAX שגורמים לא פעם להפניה להיראות כאילו היא לא עובדת.
הפניה לעמוד התשלום לאחר הוספה לעגלה
הוסיפו את הקוד הבא לקובץ functions.php של תבנית הבת שלכם או לתוסף משלכם:
/**
* Send customers straight to checkout after adding a product to the cart.
*/
function savvy_add_to_cart_redirect_checkout( $url ) {
return wc_get_checkout_url();
}
add_filter( 'woocommerce_add_to_cart_redirect', 'savvy_add_to_cart_redirect_checkout' );
לאחר מכן גשו אל WooCommerce > הגדרות > מוצרים וסמנו את הפניה לסל הקניות אחרי הוספת מוצר (Redirect to the cart page after successful addition) תחת ״פעולה בעת ההוספה לסל הקניות״. בחלק הבא אסביר למה ההגדרה הזו חשובה.
איך זה עובד?
כאשר מוצר נוסף באמצעות שליחת טופס רגילה או באמצעות קישור ?add-to-cart=, WooCommerce מעביר את כתובת ההפניה דרך woocommerce_add_to_cart_redirect. אם הפילטר מחזיר כתובת, WooCommerce מפנה אליה, בלי קשר למה שנקבע בהגדרות.
הפילטר מקבל גם את המוצר שנוסף כארגומנט שני. כך תוכלו להפנות רק עבור חלק מהמוצרים, כפי שתראו בהמשך.
מדריכים ישנים משתמשים ב-WC()->cart->get_checkout_url(). מתודה זו מוגדרת כ-deprecated מאז גרסה 2.5 של WooCommerce. היא עדיין עובדת, אך מציגה הודעת deprecation ובפועל קוראת ל-wc_get_checkout_url(), לכן השתמשו ישירות בפונקציה.
הוספה לעגלה ב-AJAX והגדרת ההפניה
בעמוד החנות ובעמודי הקטגוריות, המוצרים נוספים בדרך כלל באמצעות AJAX, בהתאם להגדרה הפעל אפשרות כפתור AJAX של "הוסף לסל הקניות" בעמוד ארכיון המוצרים (Enable AJAX add to cart buttons on archives).
בקשת AJAX אף פעם לא מגיעה לקוד ההפניה ב-PHP, ולכן הפילטר לבדו נראה לא פעם כאילו אינו עושה דבר בעמודי הארכיון.
WooCommerce מטפל במצב הזה באמצעות הגדרת ההפניה:
- ההגדרה כבויה: הכפתורים בעמודי הארכיון מוסיפים את המוצר ברקע, והגולש נשאר באותו עמוד. הפילטר שלכם משפיע רק על עמודי מוצר בודדים ועל קישורי הוספה לעגלה.
- ההגדרה פעילה: לאחר שבקשת ה-AJAX מצליחה, הסקריפט מפנה לכתובת עגלת הקניות, וגם הכתובת הזו עוברת דרך
woocommerce_add_to_cart_redirect. כשהסניפט פעיל, התוצאה היא עמוד התשלום.
בתבניות בלוקים, הבלוקים Product Button ו-Add to Cart with Options משתמשים בקישור רגיל או בשליחת טופס רגילה כאשר ההגדרה פעילה, כך שגם הם עוברים דרך הפילטר.
סימון ההגדרה הוא מה שהופך את ההפניה לעקבית בכל הכפתורים.
הפניה עבור מוצרים מסוימים בלבד
השתמשו בארגומנט המוצר כדי להגביל את ההפניה. הגרסה הבאה מדלגת על עגלת הקניות רק עבור מוצרים בקטגוריה courses:
function savvy_add_to_cart_redirect_courses( $url, $product ) {
if ( $product instanceof WC_Product && has_term( 'courses', 'product_cat', $product->get_id() ) ) {
return wc_get_checkout_url();
}
return $url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'savvy_add_to_cart_redirect_courses', 10, 2 );
בדיקת instanceof חשובה. כאשר WooCommerce בונה את כתובת עגלת הקניות עבור סקריפט ה-AJAX שלו, הוא קורא לפילטר עם null במקום עם מוצר.
אם קישור מוסיף ישירות מזהה (ID) של וריאציה, $product יהיה אותה וריאציה, ולכן במקרה כזה בדקו את get_parent_id() שלה.
כדי להציג הודעה באותו עמוד במקום לבצע הפניה, עיינו בפוסט הקפצת הודעה לאחר הוספת מוצר לעגלת הקניות. למידע נוסף על האקשנים והפילטרים המעורבים, עיינו בפוסט מדריך שימוש בהוקים של WooCommerce.
שאלות נפוצות
שאלות נפוצות על הפניה לעמוד התשלום לאחר הוספה לעגלה:
woocommerce_add_to_cart_redirect.