שינוי ומודיפיקציה לפירורי הלחם של ווקומרס

את פירורי הלחם (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. הפונקציה רצה בסדר הבא:

  1. מפעילה את woocommerce_breadcrumb_defaults על מערך ברירת המחדל.
  2. ממזגת את ה-$args שהועברו ישירות ל-woocommerce_breadcrumb( $args ), והם גוברים על ערכי ברירת המחדל שעברו את הפילטר.
  3. מוסיפה את פירור ה-Home (הכתובת מגיעה מ-woocommerce_breadcrumb_home_url) ובונה את פירורי הלחם באמצעות המחלקה WC_Breadcrumb.
  4. מפעילה את האקשן woocommerce_breadcrumb, שמייצר את ה-Schema מסוג BreadcrumbList.
  5. טוענת את 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:

מה ההבדל בין before/after לבין wrap_before/wrap_after?
wrap_before ו-wrap_after מודפסים פעם אחת, מסביב לכל פירורי הלחם. before ו-after מודפסים מסביב לכל פירור בנפרד, וכך מייצרים פריטי רשימה.
איך מסירים את פירור ה-Home?
הגדירו את $defaults['home'] כמחרוזת ריקה בפילטר woocommerce_breadcrumb_defaults. WooCommerce מוסיף את פירור ה-Home רק כאשר הערך הזה אינו ריק.
האם קיים מאפיין WC()->breadcrumb?
לא. בכדי לקבל את הפירורים בקוד שלכם, צרו new WC_Breadcrumb() וקראו למתודה generate() שלו. במערך הזה אין פירור Home, מכיוון ש-woocommerce_breadcrumb() מוסיפה אותו לפני היצירה.
האם אפשר לדרוס את התבנית של פירורי הלחם במקום זאת?
כן. העתיקו את templates/global/breadcrumb.php אל yourtheme/woocommerce/global/breadcrumb.php. עם זאת, העדיפו את הפילטרים כשאפשר, מכיוון שתבניות שנדרסו דורשות עדכון בכל פעם ש-WooCommerce משנה אותן.
דיון ותגובות
[  0 תגובות  ]

השאירו תגובה

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