מדריך ליצירת סוגי תוכן מותאמים (Custom Post Types)

מדריך ליצירת Custom Post Types

וורדפרס צברה תאוצה בשנים באחרונות והשיגה לעצמה שם ומוניטין בעולם האינטרנט כמערכת ניהול תוכן (CMS) מהמוצלחות שיש. אחת מפריצות הדרך החשובות של וורדפרס כמערכת ניהול תוכן היא האפשרות ליצור (Custom Post Types (CPT או בעברית סוגי תוכן מותאמים אשר הביאו עימם את האפשרות ליצור סוגי תוכן שונים במערכת ולהרחיב את יכולותיה. במדריך זה נסביר מעט על השימוש בהם ועל האפשרויות והפונקציונליות שסוגי תוכן מותאמים מציעים.

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

קצת היסטוריה

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

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

מה וורדפרס מאפשרת לכם לעשות עכשיו

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

  • לגרום לסוג התוכן שיצרתם להופיע כתפריט נפרד בלוח הבקרה של וורדפרס
  • ניווט לכתובת http://mysite.co.il/customposttype תציג לכם את הארכיון של סוג התוכן, בדומה לכך שדף הבית מציג את הפוסטים האחרנים מסוג התוכן שנקרא ״פוסט״
  • אפשרות להוסיף קטגוריות ותגיות לסוג התוכן, או ליצור טקסונומיות משלכם

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

על הדרך, הצטרפו לרשימת התפוצה !

אז איך יוצרים סוגי תוכן מותאמים ?

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

function snippet_custom_init() {

    $args = array(); 
    register_post_type( 'snippet', $args );

}

    add_action( 'init', 'snippet_custom_init');

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

function snippet_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('category'),
          'menu_position' => null,
          'supports' => array( 'title', 'author', 'thumbnail', 'excerpt', 'comments', 'editor' )
          );

        register_post_type( 'snippet', $args );
    }
    add_action( 'init', 'snippet_custom_init');

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

ניתן מבט על חלק מהפרמטרים:

  • labels – פרמטר זה צריך להיות מערך המגדיר את התוויות שיהיו לסוג התוכן בלוח הבקרה של וורדפרס.
  • description – תיאור קצר על סוג התוכן, מה הוא עושה ומדוע אנחנו משתמשים בו.
  • exclude_from_search – יגדיר האם סוג התוכן יופיע בתוצאות החיפוש כשיתבצע חיפוש באתר (front end).
  • menu_position – המיקום שיופיע התפריט בלוח הבקרה של וורדפרס (ברירת המחדל היא מתחת לתפריט תגובות).
  • supports – מגדיר במה יתמוך סוג התוכן שיצרתם, לדוגמא כותרת, תקציר, תגובות, גירסאות וכו׳…
  • has_archive – מאפשר להציג ארכיון (archive) לסוג תוכן זה.

סוג תוכן מותאם

הצגת התוכן באתר שלכם

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

הצגת סוג תוכן מותאם אישית

במידה ויצרתם סוג תוכן מותאם כשהפרמטר has_archive שווה ל true, וורדפרס תציג את סוג התוכן בדף הארכיון (archive.php). אם סוג התוכן שיצרנו נקרא books, אתם יכולים לגשת ל http:/mysite.co.il/books בכדי לראות את רשימת הפוסטים שיצרתם. דף זה ישתמש בקובץ archive-[post_type].php במידה וקיים על מנת להציג את הרשימה. במידה והוא אינו קיים ישתמש בקובץ archive.php,  כשזה לא קיים ישתמש ב index.php… כך עובדת ההיררכיה של וורדפרס.

דרך נוספת להציג את רשימת הפוסטים שיצרתם היא על ידי שימוש ב custom query והלולאה של וורדפרס. בכדי להציג את רשימת הפוסטים בתבנית שלכם אתם יכולים להשתמש במשהו כזה:

<?php

    $args = array(
      'post_type' => 'products'
    );
    $products = new WP_Query( $args );
    if( $products->have_posts() ) {
      while( $products->have_posts() ) {
        $products->the_post();
        ?>
          <h1><?php the_title() ?></h1>
          <div class='content'>
            <?php the_content() ?>
          </div>
        <?php
      }
    }
    else {
      echo 'אין מוצרים !';
    }

    ?>

מילים אחרונות

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

אהבתם את המדריך? תנו מבט על אותו נושא במדריך שכתבתי על השימוש ב Advanced Custom Fields.

רועי יוסף

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

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

{ 8 תגובות… הוסף אחת }
  • רמי 8 ביולי 2015, 10:58

    רועי, פוסט יפה מאוד, כל הכבוד על ההשקעה.

    מספר הערות:

    1. ראשית אין להשתמש בעברית בקוד, יש להשתמש באנגלית ולהוסיף ולהשתמש בפונקציות התרגום של וורדפרס בשילוב של textdomain.
    2. ולמה לכתוב קוד כשאפשר להשתמש בגנרטור לייצור הקוד – https://generatewp.com/post-type/
    3. ואם כבר אתה נמנע מלהשתמש בתוספים כדי ליצור סוגי פוסטים, מדוע להשתמש בתוסף ACF כדי ליצור metabox? אפשר לכתוב קוד כדי להוסיף שדות נוספים ולהרחיב את הפונקציונאליות.

    חוץ מזה, אחלה פוסט!

    • מנהל מערכת 8 ביולי 2015, 11:13

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

      • רמי 8 ביולי 2015, 16:18

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

        שימוש בתוספים כמו ACF מוסיף הרבה תקורה לאתר שלך. הרי התוסף מביא פתרון כולל לכל הצרכים של כל המשתמשים, גם דברים שאתה לא צריך. ואפילו אם לא תשתמש בתוסף אלא בספרייה שיוצרת Meta Box או Custom Post Types או Taxonomy עדיין יש תקורה רבה והמון דברים מיותרים (קרוב ל-90% מהקוד לא יהיה רלוונטי לפרוייקט שלך).

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

        • מנהל מערכת 8 ביולי 2015, 19:33

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

          • רמי 9 ביולי 2015, 0:30

            בעבר הרבה מפתחים אמרו לי את זה על post types ועל taxonomies עד ששחררתי את הגנרטורים האוטומטיים ב-GenerateWP.com , היום הם כבר לא משתמשים בתוספים.

            עוד מעט אנחנו נשחרר MetaBox Generator ואז גם השימוש ב-ACF יפחת.

          • רמי 9 ביולי 2015, 0:33

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

  • מנהל מערכת 9 ביולי 2015, 1:15

    גנרטור מדליק, אחלה כלי ויוזמה יפה !

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

    add_action( 'admin_init', 'my_remove_menu_pages' );
    function my_remove_menu_pages() {
     
        global $user_ID;
     	$user = wp_get_current_user();
    
        if ( current_user_can( 'administrator' ) && ($user && isset($user->user_login) && 'THE_USER_NAME' == $user->user_login)) {
    		remove_menu_page('plugins.php'); // Plugins
        }
    }
    
    • רמי 19 ביולי 2015, 15:52

      שוב אתה חוזר לתוספים?
      מתקין תוסף אחד בשביל להסתיר אחר?
      אתה יודע כמה קוד מיותר יש לך באתר שמאט אותו?

השאירו תגובה

שיתופים
קראו גם את:
עיצוב תוסף Contact Form 7
משחקים עם עיצוב התוסף Contact Form 7

עם מעל למיליון התקנות פעילות, Contact Form 7 הוא התוסף ליצירת טפסים מהפופולרים ביותר שקיימים...