על טקסונומיות בוורדפרס – מדריך מקיף

מדריך זה יבהיר מהן טקסונומיות בוורדפרס (Taxonomies) וכיצד ליצור אותן

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

מהן טקסונומיות בוורדפרס ?

טקסונומיות, במובן הפשוט ביותר שלהן, הן דרך לקבץ יחד פריטים הקשורים אחד לשני בעזרת מילה או סט של מילים. מבולבלים? אנסח זאת אחרת – טקסונומיות בוורדפרס נועדו בכדי לאפשר דרך פשוטה לקבץ יחד פוסטים, עמודים או כל סוג תוכן אחר (custom post type) כאשר כברירת מחדל, וורדפרס מגיעה עם שתי טקסונומיות מרכזיות:

  • קטגוריות
  • תגיות

טקסונומיות אלו מאפשרות לכם לקבץ פוסטים באמצעות שמות או מילים עם משמעות שהגיוניות לכם ולקוראים שלכם. לדוגמא, אתם יכולים ליצור קטגוריה חדשה הנקראית ״מומלצים״ ולאחר מכן לשייך פוסטים מסויימים לקטגוריה זו. כאשר אתם יוצרים קטגוריה או תגית חדשה בוורדפרס, אתם בעצם יוצרים מונח (term) חדש בתוך טקסונומיה, חיוני להבין זאת – קטגוריות ותגיות הן בעצם אימפלמנטציה מובנית של טקסונומיות בוורדפרס. באפשרותכם כמובן ליצור טקסונומיות משלכם עם מונחים (terms) הרלוונטים לאתר הוורדפרס שלכם.

יצירת טקסונומיות משלכם

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

כיצד ליצור טקסונומיה

על מנת ליצור טקסונומיה משלכם עליכם להגדיר את אותה טקסונומיה באמצעות הפונקציה register_taxonomy. פונקציה זו מקבלת שלושה פרמטרים כלהלן:

register_taxonomy($taxonomy, $object_type, $args)

 

  1. taxonomy$ – שם הטקסונומיה אותה אתם יוצרים. ראינו כי וורדפרס קוראת לטקסונומיות המובנות בה ׳קטגוריות׳ ו׳תגיות׳, באפשרותכם לקבוע לשלכם שם אחר כגון ׳מחלקות׳. שם זה צריך להיות מתחת ל 32 אותיות ויכול להכיל אך ורק אותיות וקווים תחתונים.
  2. object_type$ – שם סוג התוכן המותאם אליו אתם מעוניינים לשייך את אותה טקסונומיה. פוסט בוורדפרס הינו סוג תוכן מותאם מסוג post, אליו משוייכות הטקסונומיות ׳קטגוריות׳ ו׳תגיות׳. באפשרותכם לשייך את הטקסונומיה שיצרתם לסוג תוכן מובנה בוורדפרס או לסוג תוכן מותאם שיצרתם בעצמכם. ישנן שתי אפשרויות במצב זה:
    • אובייקט יחיד המייצג את שמו של סוג התוכן ונכתב כך '$object_type = 'post
    • מערך של אובייקטים המייצגים את שמות סוגי התוכן המותאמים.
  3. args$ – אלו הארגומנטים איתם ניתן לקבוע את כל הגדרות הטקסונומיה שיצרתם, חלקן הכרחיות וחלקן אופציונליות (וורדפרס תקבע את אלו שחסרות בעצמה):
    • label – השם ברבים של הטקסונומיה שיצרתם.
    • labels – מערך של שמות וערכים שיהיו בשימוש הטקסונומיה כאשר אלו רלוונטים בעיקר ללוח הבקרה של וורדפרס. מערך זה מגדיר את כל התוויות של הטקסונומיה, במידה ולא תכניסו שמות וערכים אלו, וורדפרס תשתמש בשם שבחרתם תחת הגדרת label. בסופו של דבר תוויות אלו הו סכ״ה הטקסט שיופיע בלוח הבקרה. מוזמנים לראות את רשימת התוויות המלאה כאן.
    • public – קובע האם ניתן יהיה לבצע שאילתא (query) לטקסונומיה.
    • show_ui – קובע האם וורדפרס תציג את אזור הניהול של אותה טקסונומיה [ היכן שמנהלים את המונחים (terms) ] בלוח הבקרה.
    • show_in_nav_menus – מגדיר האם המונחים שיצרתם באותה טקסונומיה יהיו ניתנים לבחירה באזור התפריטים של וורדפרס.
    • show_tagcloud – קובע האם וורדפרס תכלול את המונחים של הטקסונומיה בווידג׳ט ״ענן תגיות״.
    • meta_box_cb – מאפשר לכם לקבוע את הפונקציה שבשימוש על מנת להציג את המטא בוקס (meta box) של אותה טקסונומיה, בשונה מהתצורות המובנות של וורדפרס, ניתן לקרוא לפונקציה חיצונית ולהציג אותה כ Dropdown לדוגמא. (עוד על כך בקרוב).
    • show_admin_column – במידה ואתם נמצאים בממשק הניהול של וורדפרס וצופים ברשימת כל הפוסטים המשוייכים לתוכן מותאם כלשהו (custom post type), תוכלו לראות עמודות של הטקסונומיות הקיימות לאותו סוג תוכן כמו גם את המונחים המשוייכים לאותו סוג תוכן. show_admin_column - טקסונומיות וורדפרס
    • update_count_callback – בכנות – אני עדיין מנסה להבין סעיף זה – אתם מוזמנים לשתף אותי בתגובות 🙂
    • query_var – קובע את השם בשימוש על מנת לבצע שאילתא על סוג התוכן. כברירת מחדל, זה מוגדר כשם הטקסונומיה עצמה. מומלץ לא לגעת בהגדרה זו.
    • rewrite – ניתן להשתמש בהגדרה זו במספר דרכים, שימוש ב false יבטל את הקישורים הישירים (permalinks). מומלץ לא לגעת בהגדרה זו.
    • capabilities – מתייחס להרשאות הנדרשות על מנת לבצע אינטראקציה עם אותה טקסונומיה כגון מחיקה, הוספה וכו׳…מומלץ לא לגעת בהגדרה זו.
    • sort – מגדיר כי יש לזכור את סדר השיוך כאשר משייכים מונחים לפוסט.

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

הצטרפו לרשימת התפוצה!

 

יצירת טקסונומיות בוורדפרס

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

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

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

לענייננו, בכדי ליצור את סוג התוכן המותאם, הוסיפו את הקוד הבא לקובץ functions.php בתבנית הבת שלכם:

function jobs_custom_init() {
      $labels = array(
          'name' => 'עבודות',
          'singular_name' => 'עבודה',
          'add_new' => 'הוסף עבודה חדשה',
          'add_new_item' => 'הוסף עבודה חדשה',
          'edit_item' => 'ערוך עבודה',
          'new_item' => 'עבודה חדשה',
          'all_items' => 'כל העבודות',
          'view_item' => 'הצג עבודה',
          'search_items' => 'חפש עבודה',
          'not_found' =>  'לא נמצאו עבודות',
          'not_found_in_trash' => 'לא נמצאו עבודות בפח',
          'parent_item_colon' => '',
          'menu_name' => 'עבודות',
          );

      $args = array(
          'labels' => $labels,
          'exclude_from_search' => false,
          'public' => true,
          'publicly_queryable' => true,
          'show_ui' => true,
          'show_in_menu' => true,
          'query_var' => true,
          'rewrite' => array( 'slug' => 'עבודה' ),
          'capability_type' => 'post',
          'has_archive' => true,
          'hierarchical' => false,
          'taxonomies' => array('location', 'department'),
          'menu_position' => null,
          'supports' => array( 'title', 'author', 'thumbnail', 'excerpt', 'comments', 'editor' )
          );

        register_post_type( 'jobs', $args );
    }
    add_action( 'init', 'jobs_custom_init');

בקוד זה יצרנו סוג תוכן מותאם חדש בשם jobs (שורה 35).

שימו לב כי בשורה 30 אנו משייכים לסוג תוכן זה שתי טקסונומיות בשם location ו department (שעדיין לא יצרנו), אך יכולנו באתה מידה לשייך טקסונומיות אלו לסוג התוכן post המובנה עם וורדפרס.

בכדי ליצור את הטקסונומיות נשתמש בפונקציה register_taxonomyניתן לכתוב שתי פונקציות נפרדות ליצירת כל אחת מהטקסונומית או להשתמש בפונקציה המאפשרת רישום של מספר טקסונומיות במקביל, כבדוגמא הבאה:

/**
 * Register Multiple Taxonomies
 */
function register_my_taxonomies() {
  $taxonomies = array(
    array(
      'slug'         => 'department',
      'single_name'  => 'מחלקה',
      'plural_name'  => 'מחלקות',
      'post_type'    => 'jobs',
      'rewrite'      => array( 'slug' => 'department' ),
    ),
    array(
      'slug'         => 'location',
      'single_name'  => 'מיקום',
      'plural_name'  => 'מיקומים',
      'post_type'    => 'jobs',
      'rewrite'      => array( 'slug' => 'location' ),
    ),
  );
  foreach( $taxonomies as $taxonomy ) {
    $labels = array(
      'name' => $taxonomy['plural_name'],
      'singular_name' => $taxonomy['single_name'],
      'search_items' =>  'Search ' . $taxonomy['plural_name'],
      'all_items' => 'All ' . $taxonomy['plural_name'],
      'parent_item' => 'Parent ' . $taxonomy['single_name'],
      'parent_item_colon' => 'Parent ' . $taxonomy['single_name'] . ':',
      'edit_item' => 'Edit ' . $taxonomy['single_name'],
      'update_item' => 'Update ' . $taxonomy['single_name'],
      'add_new_item' => 'Add New ' . $taxonomy['single_name'],
      'new_item_name' => 'New ' . $taxonomy['single_name'] . ' Name',
      'menu_name' => $taxonomy['plural_name']
    );

    $rewrite = isset( $taxonomy['rewrite'] ) ? $taxonomy['rewrite'] : array( 'slug' => $taxonomy['slug'] );
    $hierarchical = isset( $taxonomy['hierarchical'] ) ? $taxonomy['hierarchical'] : true;

    register_taxonomy( $taxonomy['slug'], $taxonomy['post_type'], array(
      'hierarchical' => $hierarchical,
      'labels' => $labels,
      'show_ui' => true,
      'query_var' => true,
      'rewrite' => $rewrite,
    ));
  }

}
    add_action( 'init', 'register_my_taxonomies' );

הקוד הנ״ל יצור שתי טקסונומיות חדשות בשם location ו department וישייך אותן לסוג התוכן jobs שיצרנו. שימו לב שבשורות 6-19, הגדרנו את הטקסונומיות שברצוננו ליצור – זה המקום גם להוסיף ולהסיר טקסונומיות כמובן.

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

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

יצירת טקסונומיות בוורדפרס

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

הוספת טקסונומיות בוורדפרס

 

יצירת מונחים חדשים (terms)

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

בחירת מונחים טקסונומיות בוורדפרס

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

אינטראקציה עם טקסונומיות ומונחים בוורדפרס

ניתן דוגמא פשוטה כיצד ניתן להשתמש בלולאה בכדי להציג אך ורק את הפוסטים של סוג התוכן jobs תחת הטקסונומיה departments ותחת ה המונח –  development :

    $args = array(
      'post_type' => 'jobs',
      'tax_query' => array(
        'relation' => 'AND',
        array(
          'taxonomy' => 'department',
          'field'    => 'slug',
          'terms'    => array( 'development' ),
        ),
      ),
    );
    $posts = new WP_Query( $args );

    if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post();
      /* your custom loop content */
    endwhile; endif;

שימו לב כי בשורה 9 אנו בוחרים את המונח לפי המזהה שלו (slug) , כשבמקרה שלנו ה slug של מחלקת פיתוח הינו development (שורה 10). אתם יכולים לקבוע את מזהה המונח בדף העריכה של אותו מונח.

במידה ושיניתם את המזהה של המונח בדיעבד, זכרו לשמור מחדש את הגדרות הקישורים הישירים תחת הגדרות > קישורים ישירים.

בכדי לרוץ עם הלולאה על טקסונומיות אנו משתמשים בפרמטר הנקרא tax_query$, לפרמטר זה מספר ארגומנטים:

  • relation – מגדיר את הקשר הלוגי בין כל טקסונומיה שהוספתם למערך במידה וישנה יותר מטקסונומיה אחת. האופציות הם  AND' , 'OR'
  • taxonomy – שם הטקסונומיה.
  • field – ניתן לבחור על פי מה נזהה את המונחים עצמם, בין אם לפי id , לפי מזהה (slug), לפי שם (name) או לפי ה id של הטקסונומיה (term_taxonomy_id).
  • terms – המונחים בהתאם ל field שבחרתם.
  • include_children – האם יכללו ׳ילדים׳ בטקסונומיות היררכיות.
  • operator – האופרטור לבדיקה – לא ארחיב לסעיף זה כרגע.

 

הנה עוד דוגמא ללולאה המציגה עבודות של מחלקת פיתוח (development) הנמצאות בסין (china) בלבד:

    $args = array(
      'post_type' => 'jobs',
      'tax_query' => array(
        'relation' => 'AND',
        array(
          'taxonomy' => 'department',
          'field'    => 'slug',
          'terms'    => array( 'development' ),
        ),
        array(
          'taxonomy' => 'location',
          'field'    => 'slug',
          'terms'    => array( 'china' ),
        ),
      ),
    );
    $posts = new WP_Query( $args );

    if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post();
      /* your custom loop content */
    endwhile; endif;

בכדי לקבל את העבודות של מחלקת פיתוח או עבודות בסין, נשנה את ה relation ל 'OR'.

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

'terms'    => array( 'development', 'design' )

לסיכום

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

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

מאד אשמח אם תתקנו, תעירו או תגיבו… מתקבל בברכה 🙂

 

רועי יוסף

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

תגובות פייסבוק

{ 6 תגובות… הוסף אחת }

השאירו תגובה

שיתופים
קראו גם את:
דריסת פונקציות בתבנית אב תבנית בת
דריסת פונקציות בתבנית אב על ידי תבנית בת

לתבניות בת פונקציונליות המאפשרת לרשת (מהמילה ירושה) תבניות ופונקציות מתבנית אחרת. על ידי שימוש בתבנית...