Language EN
חיפוש

הסרה, הוספה ועריכת לשוניות (Tabs) במוצרי ווקומרס

ווקומרס כוללת שלוש לשוניות ברירת מחדל בכל עמוד מוצר: "תיאור", "מידע נוסף" ו"חוות דעת". אלה נקראים Product Data Tabs, וווקומרס מספקת פילטר הוק שמאפשר לכם להסיר, לשנות שם, לשנות סדר, להתאים אישית או להוסיף לשוניות חדשות לגמרי.

כל קטעי הקוד במדריך הזה משתמשים בפילטר woocommerce_product_tabs. הוסיפו אותם לקובץ functions.php בתבנית הבת שלכם, או בתוסף מותאם אישית.

אם לא ברור, מדובר בלשוניות שמופיעות מתחת למוצר עצמו, כפי שמוצג בתמונה הבאה (הן עשויות להיראות אחרת בהתאם לתבנית שלכם):

הסרה, הוספה ועריכת לשוניות במוצרי ווקומרס

"Product tabs can be removed, renamed, re-ordered and customized using the woocommerce_product_tabs filter." – WooCommerce official documentation.

הסרת לשוניות

השתמשו ב-unset() על מפתחות הלשוניות כדי להסיר לשוניות ספציפיות. שלושת מפתחות ברירת המחדל הם description, reviews ו-additional_information:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    unset( $tabs['description'] );
    unset( $tabs['reviews'] );
    unset( $tabs['additional_information'] );

    return $tabs;
}, 98 );

הסירו רק את הלשוניות שאתם לא צריכים. למשל, אם אתם רוצים לשמור את התיאור אבל להסיר חוות דעת ומידע נוסף, בצעו unset רק לשתיים אלו.

שינוי שם הלשוניות

שנו את מאפיין ה-title של כל לשונית כדי לשנות את שמה. בדקו תמיד עם isset() קודם, מכיוון שלשונית עשויה לא להתקיים עבור כל מוצר:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    if ( isset( $tabs['description'] ) ) {
        $tabs['description']['title'] = __( 'More Information', 'woocommerce' );
    }

    if ( isset( $tabs['reviews'] ) ) {
        $tabs['reviews']['title'] = __( 'Ratings', 'woocommerce' );
    }

    if ( isset( $tabs['additional_information'] ) ) {
        $tabs['additional_information']['title'] = __( 'Product Data', 'woocommerce' );
    }

    return $tabs;
}, 98 );

השתמשו תמיד ב-isset() לפני שינוי מאפייני לשונית. הלשונית "מידע נוסף" קיימת רק כשלמוצר מוגדרות תכונות, מידות או משקל. גישה אליה ללא בדיקה מראש תגרום לאזהרת PHP.

שינוי סדר הלשוניות

שנו את ערך ה-priority כדי לשלוט בסדר הלשוניות. מספרים נמוכים יותר מופיעים ראשונים:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    if ( isset( $tabs['reviews'] ) ) {
        $tabs['reviews']['priority'] = 5;
    }

    if ( isset( $tabs['description'] ) ) {
        $tabs['description']['priority'] = 10;
    }

    if ( isset( $tabs['additional_information'] ) ) {
        $tabs['additional_information']['priority'] = 15;
    }

    return $tabs;
}, 98 );

ערכי ה-priority של ברירת המחדל הם: Description (10), Additional Information (20), Reviews (30). התאימו מספרים אלה כדי למקם לשוניות בכל סדר שתרצו.

התאמה אישית של תוכן לשונית

החליפו את ה-callback של לשונית כדי לשנות את התוכן שלה לחלוטין:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    if ( isset( $tabs['description'] ) ) {
        $tabs['description']['callback'] = 'savvy_custom_description_content';
    }

    return $tabs;
}, 98 );

function savvy_custom_description_content() {
    echo '<h2>תיאור מותאם אישית</h2>';
    echo '<p>הנה תוכן התיאור המותאם שלכם.</p>';
}

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

הוספת לשונית מותאמת אישית

הוסיפו רשומה חדשה למערך $tabs עם מפתח ייחודי, כותרת, priority ופונקציית callback:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    $tabs['usage_instructions'] = array(
        'title'    => __( 'הוראות שימוש', 'woocommerce' ),
        'priority' => 50,
        'callback' => 'savvy_usage_instructions_content',
    );

    return $tabs;
} );

function savvy_usage_instructions_content() {
    echo '<h2>הוראות שימוש</h2>';
    echo '<p>עקבו אחרי השלבים הבאים לשימוש במוצר זה...</p>';
}

ברוב המקרים תרצו למשוך את תוכן הלשונית משדה מותאם אישית במקום לקודד אותו קשיח. תוכלו להשתמש ב-Advanced Custom Fields כדי ליצור שדה בעמוד המוצר, ואז להציג את הערך שלו ב-callback באמצעות get_field().

הצגת לשוניות עבור מוצרים ספציפיים או סוגי מוצר

השתמשו ב-global $product בתוך פונקציית הפילטר כדי להוסיף לוגיקה מותנית. למשל, הצגת לשונית רק עבור מוצר מסוים:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    global $product;

    if ( $product->get_id() === 5 ) {
        $tabs['special_tab'] = array(
            'title'    => __( 'מידע מיוחד', 'woocommerce' ),
            'priority' => 25,
            'callback' => 'savvy_special_tab_content',
        );
    }

    return $tabs;
} );

או הצגת לשונית רק עבור מוצרים משתנים (variable):

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    global $product;

    if ( $product->is_type( 'variable' ) ) {
        $tabs['sizing_guide'] = array(
            'title'    => __( 'מדריך מידות', 'woocommerce' ),
            'priority' => 25,
            'callback' => 'savvy_sizing_guide_content',
        );
    }

    return $tabs;
} );

תוכלו להשתמש בכל מתודת מוצר לתנאים: is_type(), get_category_ids(), is_virtual(), is_downloadable() ועוד.

הלשונית "מידע נוסף"

הלשונית "מידע נוסף" היא מקרה מיוחד. ווקומרס מציגה אותה רק כשלמוצר מוגדרות תכונות, מידות או משקל (לא תכונות שבשימוש לוריאציות).

אם תנסו לשנות לשונית זו במוצר שאין לו מאפיינים אלה, תקבלו אזהרת PHP:

Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in .../templates/single-product/tabs/tabs.php on line 35

כדי להימנע מכך, בדקו תמיד עם המתודות המובנות של ווקומרס לפני שינוי הלשונית:

add_filter( 'woocommerce_product_tabs', function( $tabs ) {

    global $product;

    if ( $product->has_attributes() || $product->has_dimensions() || $product->has_weight() ) {
        $tabs['additional_information']['title'] = __( 'מפרט טכני', 'woocommerce' );
    }

    return $tabs;
}, 98 );

שלוש המתודות שניתן להשתמש בהן הן has_attributes(), has_dimensions() ו-has_weight().

דריסת תבנית הלשוניות

להתאמה עמוקה יותר מעבר למה שהפילטר woocommerce_product_tabs מספק, תוכלו לדרוס את תבנית הלשוניות של ווקומרס ישירות. העתיקו את קובץ התבנית מהתוסף לתבנית הבת שלכם:

From: wp-content/plugins/woocommerce/templates/single-product/tabs/tabs.php
To:   wp-content/themes/your-child-theme/woocommerce/single-product/tabs/tabs.php

זה נותן לכם שליטה מלאה על ה-markup של הלשוניות, כולל מבנה ה-HTML, מחלקות CSS, ואיך הלשוניות מרונדרות. השתמשו בגישה זו כשאתם צריכים לשנות את ממשק הלשוניות עצמו (למשל, מעבר מלשוניות אופקיות לפריסת אקורדיון).

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

שאלות נפוצות

שאלות נפוצות על לשוניות מוצר בווקומרס:

באיזה פילטר הוק משתמשים להתאמת לשוניות מוצר בווקומרס?
הפילטר הוק woocommerce_product_tabs. הוא מקבל מערך של כל לשוניות המוצר, כאשר לכל לשונית יש כותרת, פונקציית callback ו-priority. תוכלו לשנות מערך זה כדי להוסיף, להסיר, לשנות שם או לשנות סדר של לשוניות.
איך מסירים את לשונית חוות הדעת בווקומרס?
הוסיפו unset( $tabs['reviews'] ); בתוך פונקציה שמחוברת לפילטר woocommerce_product_tabs. לחלופין, תוכלו להשבית חוות דעת לחלוטין ב-WooCommerce > Settings > Products > General על ידי ביטול הסימון של "Enable product reviews".
למה הלשונית "מידע נוסף" לא מוצגת?
הלשונית "מידע נוסף" מופיעה רק כשלמוצר יש לפחות אחד מהבאים: תכונות (שאינן בשימוש לוריאציות), מידות או משקל. אם אף אחד מאלה לא מוגדר, ווקומרס מסתירה את הלשונית אוטומטית. הוסיפו נתוני מוצר ב-metabox של "Product data" כדי שהלשונית תופיע.
אפשר להוסיף לשוניות מוצר עם תוסף במקום קוד?
כן. ווקומרס מציעה תוסף רשמי "Custom Product Tabs", ומספר תוספים חינמיים כמו "Custom Product Tabs for WooCommerce" של YIKES מאפשרים להוסיף לשוניות מממשק הניהול ללא כתיבת קוד. עם זאת, גישת הפילטר נותנת לכם גמישות רבה יותר ולא מוסיפה תלות בתוסף.
איך מושכים תוכן מ-ACF ללשונית מותאמת?
צרו שדה ACF על סוג הפוסט product, ואז השתמשו ב-get_field( 'your_field_name' ) בתוך פונקציית ה-callback של הלשונית. תוכלו להציג את הלשונית בתנאי רק כשלשדה יש תוכן על ידי בדיקת ערך השדה בתוך הפילטר woocommerce_product_tabs לפני הוספת הלשונית.
באיזה priority להשתמש לפילטר woocommerce_product_tabs?
priority של 98 נפוץ, שרץ אחרי שווקומרס רושמת את לשוניות ברירת המחדל (priority 10-30). זה מבטיח שלשוניות ברירת המחדל קיימות במערך לפני שאתם מנסים לשנות אותן. אם אתם רק מוסיפים לשוניות חדשות, ה-priority של ברירת המחדל 10 עובד מצוין.

סיכום

הפילטר woocommerce_product_tabs של ווקומרס נותן לכם שליטה מלאה על לשוניות עמוד המוצר. תוכלו להסיר לשוניות עם unset(), לשנות שם על ידי שינוי מאפיין ה-title, לשנות סדר עם priority, להחליף תוכן עם callback מותאם, או להוסיף לשוניות חדשות לגמרי.

השתמשו תמיד בבדיקות isset() לפני שינוי לשוניות קיימות, במיוחד הלשונית "מידע נוסף" שקיימת רק כשלמוצר יש תכונות, מידות או משקל.

לשינויים מבניים עמוקים יותר, דרסו את תבנית הלשוניות בתבנית הבת שלכם – אבל העדיפו את גישת הפילטר כשאפשר, מכיוון שהיא עמידה יותר לעדכוני ווקומרס.

דיון ותגובות
17 תגובות  ]
  • יאיר 16 נובמבר 2019, 21:14

    אליפות!
    מאמר מעולה. אתר מעולה. תודה!

  • רוב 18 נובמבר 2019, 10:26

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

    • רועי יוסף 18 נובמבר 2019, 16:29

      אני חושב שהדרך הנכונה ביותר לבצע את זה היא להוסיף באמצעות ACF אפשרות לבחירת קטגוריה בעמוד מוצר (Taxonomy Field) ואז להשתמש באפשרות של Related Posts כפי שהדגמתי בפוסט הצגת Related Posts (מאמרים רלוונטים) ללא תוסף. כך בחשבון שתאלץ במקרה זה לשנות את הלולאה כך שהיא תציג את אותם מאמרים נוספים לפי אותו Custom Field שיצרת עם ACF.

    • adiel bm 8 אוגוסט 2020, 22:59

      יש אפשרות נחמדה להציג את הפוסטים לפי חיפוש שם המוצר … (במקרה שלי רק לפי 2 המילים הראשונות)

      global $product; 
      $name = $product->get_name();
       
      $search = wp_trim_words( $name, 2, ' ' );
      
      
      // The Query        
      $the_query = new WP_Query(  array(  
                'post_type' => 'post',
                'posts_per_page' => '3',
                's'    => $search
                                              
      ) );
       
      // The Loop.......  וכו' 
  • אודי 19 נובמבר 2019, 10:51

    איזה אחלה מדריך! תודה רועי

  • adiel bm 4 נובמבר 2020, 10:23

    לגבי: 6. הצגת לשונית עבור סוג מוצר ספציפי או מוצרים מסויימים. צריך להוסיף else במקרה שהתנאי לא מתקיים, כי אחרת אם יש כמה tabs custom שכל אחד עם תנאי אחר אז אחד מהם לא יוצג. מקווה שהובן.

    function savvy_custom_tab( $tabs ) {
    
    	global $product;
    
    	if( $product->get_id() == 5 ) {
    
    		// ....
           } else {
    
           return $tabs;
    
           }

    תקנו אותי אם אני טועה..

    • רועי יוסף 4 נובמבר 2020, 23:59

      היי, תודה שאתה פעיל בבלוג 🙂

      לא בטוחים שאתה צודק כאן… אתה יכול לתת דוגמה מפורטת על סיטואציה בעייתית?

      • adiel 5 נובמבר 2020, 7:55

        הבנתי את הטעות שלי,

        אני שמתי את ה – return $tabs בתוך ה- if, ולכן את אחד מהם הוא לא הציג.. צריך לשים אותו מחוץ ל if שגם אם התנאי לא מתקיים הוא מחזיר את ה tabs$.

        נ.ב. אני מאוד נהנה מהבלוג, עד לפני שנה לא הייתי בכלל מבין בוורדפרס, ובכלל בקוד. היום אם אני יודע משהו, זה הרבה בזכות הבלוג הזה…

        תודה

  • קובי 23 דצמבר 2020, 21:10

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

    טאב: מאפיינים [קבוע] – [תיאור שונה] ….

    • רועי יוסף 25 דצמבר 2020, 15:44

      היי קובי,

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

  • ליעוז 11 ינואר 2021, 13:41

    היי רועי,
    אני לא רואה אפשרות לערוך את הלשונית (ספק) שהוספתי בממשק הגרפי של וורדפרס, לפי המדריך.
    האם קיימת אפשרות כזו?

    • רועי יוסף 6 פברואר 2021, 16:18

      היי ליעוז, סליחה על התגובה המאוחרת… אני לא מבין כל-כך את הבעיה, תרצה להרחיב?

  • שי ביטון 28 יוני 2021, 14:07

    היי, תודה רבה על המאמר.
    אם בסעיף 5 אני רוצה להוסיף 2 טאבים שונים.. זה אפשרי ?

    • רועי יוסף 28 יוני 2021, 15:07

      הנה דוגמה לשני טאבים שונים:

      function sv_custom_tabs($tabs)
      {
      
          $tabs['test_tab'] = array(
              'title' 	=> __( 'New Product Tab', 'woocommerce' ),
              'priority' 	=> 50,
              'callback' 	=> 'woo_new_product_tab_content'
          );
          $tabs['test_tab_2'] = array(
              'title' 	=> __( 'New Product Tab 2', 'woocommerce' ),
              'priority' 	=> 51,
              'callback' 	=> 'woo_new_product_tab_content_2'
          );
          return $tabs;
      }
      
      add_filter('woocommerce_product_tabs', 'sv_custom_tabs', 98);
      
      function woo_new_product_tab_content() {
      
          // The new tab content
      
          echo '<h2>New Product Tab</h2>';
          echo '<p>Here\'s your new product tab.</p>';
      
      }
      
      function woo_new_product_tab_content_2() {
      
          // The new tab content
      
          echo '<h2>New Product Tab 2</h2>';
          echo '<p>Here\'s your new product tab.</p>';
      
      }

השאירו תגובה

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

Savvy WordPress Development official logo