את פירורי הלחם (breadcrumbs) של WooCommerce אפשר להתאים באמצעות שני פילטרים: woocommerce_breadcrumb_defaults שולט ב-markup שעוטף את פירורי הלחם, ו-woocommerce_get_breadcrumb שולט בפירורים עצמם. בסניפט הזה תמצאו הסבר על שניהם, שנבדק מול קוד המקור של WooCommerce.
אם כל מה שאתם צריכים הוא מפריד אחר, המדריך הקצר איך לשנות את הקו המפריד בפירורי הלחם של WooCommerce מכסה בדיוק את המקרה הזה. את כל הסניפטים שבהמשך יש להוסיף לקובץ functions.php בתבנית הבת שלכם.
כל הארגומנטים של woocommerce_breadcrumb_defaults
הפילטר מקבל מערך עם שישה מפתחות. אלו ערכי ברירת המחדל שלהם בפונקציה woocommerce_breadcrumb() שבקובץ includes/wc-template-functions.php:
| ארגומנט | ברירת מחדל | מה הוא עושה |
|---|---|---|
delimiter |
/ |
מודפס בין הפירורים, אף פעם לא אחרי האחרון. |
wrap_before |
<nav class="woocommerce-breadcrumb" aria-label="Breadcrumb"> |
ה-markup הפותח שעוטף את כל פירורי הלחם. |
wrap_after |
</nav> |
ה-markup הסוגר שאחרי כל פירורי הלחם. |
before |
מחרוזת ריקה | מודפס לפני כל פירור. |
after |
מחרוזת ריקה | מודפס אחרי כל פירור, לפני הקו המפריד. |
home |
_x( 'Home', 'breadcrumb', 'woocommerce' ) |
הטקסט של הפירור הראשון. ערך ריק מסיר את פירור ה-Home. |
ה-aria-label ב-wrap_before נוסף בגרסה 8.3 של WooCommerce. מדריכים ישנים מציגים את <nav class="woocommerce-breadcrumb"> בלעדיו.
שינוי מספר ערכי ברירת מחדל במקביל
הדוגמה הבאה הופכת את פירורי הלחם לרשימה ממוספרת. ערכו את המפתחות שאתם צריכים והשאירו את השאר כפי שהם:
/**
* Output the WooCommerce breadcrumb as an ordered list.
*/
function savvy_wc_breadcrumb_defaults( $defaults ) {
$defaults['wrap_before'] = '<nav class="woocommerce-breadcrumb" aria-label="Breadcrumb"><ol>';
$defaults['wrap_after'] = '</ol></nav>';
$defaults['before'] = '<li>';
$defaults['after'] = '</li>';
$defaults['delimiter'] = '';
$defaults['home'] = __( 'Store', 'your-textdomain' );
return $defaults;
}
add_filter( 'woocommerce_breadcrumb_defaults', 'savvy_wc_breadcrumb_defaults', 20 );
כשהמפריד ריק, תוכלו לצייר את המפרידים ב-CSS, למשל באמצעות .woocommerce-breadcrumb li + li::before.
איך זה עובד?
WooCommerce מחבר את woocommerce_breadcrumb() להוק woocommerce_before_main_content בעדיפות 20. הפונקציה רצה בסדר הבא:
- מפעילה את
woocommerce_breadcrumb_defaultsעל מערך ברירת המחדל. - ממזגת את ה-
$argsשהועברו ישירות ל-woocommerce_breadcrumb( $args ), והם גוברים על ערכי ברירת המחדל שעברו את הפילטר. - מוסיפה את פירור ה-Home (הכתובת מגיעה מ-
woocommerce_breadcrumb_home_url) ובונה את פירורי הלחם באמצעות המחלקהWC_Breadcrumb. - מפעילה את האקשן
woocommerce_breadcrumb, שמייצר את ה-Schema מסוג BreadcrumbList. - טוענת את
global/breadcrumb.php.
התבנית מדפיסה את wrap_before, wrap_after, before, after ו-delimiter כ-HTML גולמי. שמות הפירורים עוברים escaping, והערך של home עובר דרך wp_strip_all_tags(), כך ש-HTML בטקסט של ״Home״ מוסר.
התאמות נוספות לפירורי הלחם
הסעיפים הבאים מכסים בקשות נפוצות נוספות: הקישור של ״Home״, מערך הפירורים והסרת פירורי הלחם.
שינוי הקישור של ״עמוד הבית״ (Home Link)
כברירת מחדל, פירור ה-Home מפנה ל-home_url(). הקוד הבא מפנה אותו לעמוד החנות:
function savvy_wc_breadcrumb_home_url( $url ) {
return wc_get_page_permalink( 'shop' );
}
add_filter( 'woocommerce_breadcrumb_home_url', 'savvy_wc_breadcrumb_home_url' );
שינוי הפירורים עם woocommerce_get_breadcrumb
המערך $crumbs מכיל רשומה אחת לכל פירור, וכל רשומה היא מערך ממוספר עם שם וכתובת: array( 'Home', 'https://example.com' ). הקוד הבא מסיר את שם המוצר מעמודי מוצר יחיד:
function savvy_wc_breadcrumb_crumbs( $crumbs, $breadcrumb ) {
if ( is_product() && count( $crumbs ) > 1 ) {
array_pop( $crumbs );
}
return $crumbs;
}
add_filter( 'woocommerce_get_breadcrumb', 'savvy_wc_breadcrumb_crumbs', 10, 2 );
אותו מערך משמש גם את ה-Schema, כך שהשינויים שלכם יופיעו גם שם. אם אתם מסירים פירור מהאמצע עם unset(), עטפו את התוצאה ב-array_values() כדי לשמור על אינדקסים רציפים.
הסרה מוחלטת של פירורי הלחם
נדרש אם אתם מוסיפים פירורי לחם באמצעות תוסף SEO:
function savvy_remove_wc_breadcrumbs() {
remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 );
}
add_action( 'init', 'savvy_remove_wc_breadcrumbs' );
התבנית Storefront מעבירה את פירורי הלחם להוק storefront_before_content בעדיפות 10, כך שב-Storefront יש להסיר אותם מההוק הזה. כדי להסתיר אותם רק בעמודים מסוימים, היעזרו בסניפט הסרת פירורי הלחם של WooCommerce בעמודים מסוימים.
Storefront ותבניות בלוקים
Storefront משתמשת בפילטר woocommerce_breadcrumb_defaults בעדיפות 10 כדי להגדיר delimiter, wrap_before ו-wrap_after משלה. תבנית האב נטענת אחרי תבנית הבת שלכם, ולכן השתמשו בעדיפות 20 ומעלה כדי שהשינויים שלכם יגברו.
בתבניות בלוקים, הבלוק Store Breadcrumbs קורא ל-woocommerce_breadcrumb(), כך ששני הפילטרים שבעמוד זה עובדים גם שם.
שאלות נפוצות
שאלות נפוצות על התאמת פירורי הלחם של WooCommerce:
wrap_before ו-wrap_after מודפסים פעם אחת, מסביב לכל פירורי הלחם. before ו-after מודפסים מסביב לכל פירור בנפרד, וכך מייצרים פריטי רשימה.
$defaults['home'] כמחרוזת ריקה בפילטר woocommerce_breadcrumb_defaults. WooCommerce מוסיף את פירור ה-Home רק כאשר הערך הזה אינו ריק.
new WC_Breadcrumb() וקראו למתודה generate() שלו. במערך הזה אין פירור Home, מכיוון ש-woocommerce_breadcrumb() מוסיפה אותו לפני היצירה.
templates/global/breadcrumb.php אל yourtheme/woocommerce/global/breadcrumb.php. עם זאת, העדיפו את הפילטרים כשאפשר, מכיוון שתבניות שנדרסו דורשות עדכון בכל פעם ש-WooCommerce משנה אותן.