וורדפרס צברה תאוצה בשנים באחרונות והשיגה לעצמה שם ומוניטין בעולם האינטרנט כמערכת ניהול תוכן (CMS) מהמוצלחות שיש. אחת מפריצות הדרך החשובות של וורדפרס כמערכת ניהול תוכן היא האפשרות ליצור (Custom Post Types (CPT או בעברית סוגי תוכן מותאמים אשר הביאו עימם את האפשרות ליצור סוגי תוכן שונים במערכת ולהרחיב את יכולותיה.
במדריך זה נסביר מהם סוגי תוכן מותאמים, כיצד ליצור סוגי תוכן אלו וכיצד להציג אותם באתר הוורדפרס שלכם.
יש שיאמרו כי נכון לומר ״פוסטים מותאמים אישית״, לדעתי נכון לומר ״סוגי תוכן מותאמים״ מכיוון וזוהי מטרתם – ליצור סוגים חדשים של תוכן המותאמים לצרכים שלכם…
קצת היסטוריה
בפועל, סוגי תוכן מותאמים בוורדפרס קיימים לא מעט זמן, בעצם משנת 2005 כשוורדפרס בגירסה 1.5 הציגה את האפשרות לייצר דפים סטטיים והוסיפה את השדה post_type
למסד הנתונים.
הפונקציה wp_insert_post
הייתה קיימת מגירסה 1.0 של וורדפרס כך שכשנוסף השדה post_type
למסד הנתונים, יכולתם פשוט לקבוע את הערך שלו כשהוספתם פוסט. כמובן שיצירה וניהול סוגי תוכן מותאמים בתקופה זו דרשה לכתוב לא מעט קוד, אך עם התפתחות המערכת נדרש פחות ופחות.
בגירסה 2.9 הפונקציה register_post_type יצאה לאוויר העולם והייתה נגישה לכולם. בנקודה זו, כבר לא נדרש הרבה בכדי ליצור סוגי תוכן מותאמים על מנת לקחת את וורדפרס כמה צעדים קדימה ולגרום לה להיות מערכת ניהול תוכן במלוא מובן המילה.
מה זה סוג תוכן מותאם (CPT)?
סוג תוכן מותאם (Custom Post Type) הוא בעצם פוסט עם ערך שונה בשדה post_type
במסד הנתונים. אם תפרסמו פוסט באתר שלכם, תגשו למסד הנתונים ותשנו את סוג התוכן מ ״post״ ל ״page״, הפוסט יופיע תחת עמודים ולא תחת פוסטים בממשק הניהול.
וורדפרס מגדירה מספר תכונות לכל סוג תוכן. האם ניתן לבצע חיפוש באותו סוג תוכן? האם הוא מוצג בממשק הניהול? האם ניתן לשייך אליו קטגוריות או תגיות, האם הוא מאפשר תגובות? אלו סט של הגדרות אותן ניתן לקבוע עבור כל סוג תוכן.
כברירת מחדל, וורדפרס מגיעה עם מספר סוגי תוכן כגון: עמודים, פוסטים, תפריטים, גירסאות (post revisions) ועמודי קובץ (attachments), לכל אחד מאלו ערך שונה בשדה post_type
. וורדפרס מאפשרת לכם בצורה מאד פשוטה ליצור סוג תוכן משלכם כגון ספרים, סרטים, ביקורות, מתכונים וכל מה שתעלו על דעתכם.

מתי יש להשתמש בסוגי תוכן מותאמים?
ההחלטה האם יש צורך ליצור סוג תוכן מותאם יכולה להיות מעט בעייתית. לפעמים אתם יכולים לחלק את הפוסטים באמצעות קטגוריות ולהסתפק בכך. אך מהו הגבול? מתי עלינו להשתמש באותן קטגוריות מובנות לאותה חלוקה ומתי נכון יהיה ליצור סוג תוכן חדש?
אין לכך תשובה חד משמעית. ניתן לומר שזה מסתכם להעדפה אישית / פרקטית בהתאם לצורה בה התבנית שלכם בנויה. אך ישנם מספר קווים מנחים שניתן לעבוד לפיהם, אם אחת מהסיטואציות הבאות רלוונטיות כלפיכם, כנראה שיצירה של סוג תוכן מותאם תהיה נכונה:
- אם אתם מפרסמים לפחות שני סוגים שונים של תוכן. לדוגמה, פוסטים בלוג אישי ומתכוני אוכל.
- אם מבחינת מבנה ומבחינה ויזואלית, יהיה נכון יותר להפריד שני סוגי שונים של תוכן. לדוגמה בלוג אישי ופורטפוליו.
- אם סוג התוכן אינו מתאים מבחינה כרונולוגית. לדוגמה, בלוג חברה ושירותים אותם החברה מציעה.
- אם סוג התוכן יכול להיות מופרד בקלות לאתר משל עצמו ועדיין להשאר קוהרנטי. לדוגמה, בלוג אישי ומוצרים אותם אתם מוכרים באתר.
- אם השימוש בקטגוריות ותגיות יובילו להיררכית טקסונומיות מסובכת יתר על המידה. לדוגמה, בלוג אישי וביקורות על סרטים.
אז איך יוצרים סוגי תוכן מותאמים?
המצב האידאלי הוא ליצור סוג תוכן מותאם על ידי שימוש בתוסף ייעודי שתבנו לשם כך, אך זוהי רק המלצה, אם אינכם יודעים איך ליצור תוסף, הוסיפו את הקוד הבא לקובץ functions.php
:
// Register Custom Post Type
function snippet_post_type() {
$args = array();
register_post_type( 'snippet', $args );
}
add_action( 'init', 'snippet_post_type', 0 );
קוד זה ייצור סוג תוכן חדש אשר ללא אפשרויות כלל. הוא לא יהיה ציבורי ואף לא יופיע בלוח הבקרה של וורדפרס. בכדי לתפור את סוג התוכן לצרכים שלנו, נוסיף כמה הגדרות למערך הריק בקוד מעלה ($args
):
// Register Custom Post Type
function snippet_post_type() {
$labels = array(
'name' => _x( 'Snippets', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Snippet', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Snippets', 'text_domain' ),
'name_admin_bar' => __( 'Snippet', 'text_domain' ),
'archives' => __( 'Snippet Archives', 'text_domain' ),
'attributes' => __( 'Snippet Attributes', 'text_domain' ),
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
'all_items' => __( 'All Items', 'text_domain' ),
'add_new_item' => __( 'Add New Item', 'text_domain' ),
'add_new' => __( 'Add New', 'text_domain' ),
'new_item' => __( 'New Item', 'text_domain' ),
'edit_item' => __( 'Edit Item', 'text_domain' ),
'update_item' => __( 'Update Item', 'text_domain' ),
'view_item' => __( 'View Item', 'text_domain' ),
'view_items' => __( 'View Items', 'text_domain' ),
'search_items' => __( 'Search Item', 'text_domain' ),
'not_found' => __( 'Not found', 'text_domain' ),
'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ),
'featured_image' => __( 'Featured Image', 'text_domain' ),
'set_featured_image' => __( 'Set featured image', 'text_domain' ),
'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
'use_featured_image' => __( 'Use as featured image', 'text_domain' ),
'insert_into_item' => __( 'Insert into item', 'text_domain' ),
'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
'items_list' => __( 'Items list', 'text_domain' ),
'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
'filter_items_list' => __( 'Filter items list', 'text_domain' ),
);
$args = array(
'label' => __( 'Snippet', 'text_domain' ),
'description' => __( 'Snippet CPT Description', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor' ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
);
register_post_type( 'snippet', $args );
}
add_action( 'init', 'snippet_post_type', 0 );
בקוד מעלה הצגנו הרבה מהארגומנטים שניתן לקבוע כאשר יוצרים סוג תוכן מותאם. אין זו חובה להשתמש בכל הארגומנטים.
קוד זה ייצור סוג תוכן חדש הנקרא snippet ויופיע כתפריט סטנדרטי בלוח הבקרה של וורדפרס. תוכלו להוסיף פוסטים, לצפות ולערוך את הפוסטים של סוג תוכן זה בלוח הבקרה וכמובן לראות את הפוסטים שפירסמתם באתר שלכם.
כפי שציינתי, ישנם לא מעט פרמטרים שניתן להגדיר כשיוצרים סוג תוכן חדש, אסביר על חלקם כאן. לרשימת האפשרויות והפרמטרים המלאה תנו ב WordPress Codex.
שימו לב לשמות השמורים לעבודה עם וורדפרס ואינכם יכולים להשתמש באלו עבור טקסונומיות או סוגי התוכן שאתם יוצרים אחרת תתקלו בבעיות.
ניתן מבט על חלק מהפרמטרים:
- labels – פרמטר זה צריך להיות מערך המגדיר את התוויות שיהיו לסוג התוכן בלוח הבקרה של וורדפרס.
- description – תיאור קצר על סוג התוכן, מה הוא עושה ומדוע אנחנו משתמשים בו.
- exclude_from_search – יגדיר האם סוג התוכן יופיע בתוצאות החיפוש כשיתבצע חיפוש באתר.
- menu_position – מיקום התפריט בלוח הבקרה של וורדפרס (ברירת המחדל היא מתחת לתפריט תגובות).
- supports – מגדיר במה יתמוך סוג התוכן שיצרתם, לדוגמא כותרת, תקציר, תגובות, גירסאות וכו׳…
- has_archive – מאפשר להציג ארכיון (archive) לסוג תוכן זה.
הצגת סוג התוכן המותאם
ישנם לא מעט ניואנסים להסבר עד כה אך זה אמור לתת לכם את הבסיס ליצירת סוג תוכן מותאם בוורדפרס. מה שנשאר לנו הוא להסביר כיצד להציג את סוג התוכן שיצרתם למשתמש באתר – כרשימה של פוסטים בעמוד הארכיון וכעמוד יחיד המציג את הפוסט עצמו.
הצגת דף הארכיון (רשימת הפוסטים) של סוג התוכן שיצרתם
במידה ויצרתם סוג תוכן מותאם כשהפרמטר has_archive
שווה ל true
, וורדפרס (במצבה הדיפולטיבי) תציג סוג תוכן זה על ידי שימוש בקובץ archive.php
. אם סוג התוכן שיצרנו נקרא snippets, תוכלו לגשת ל http:/mysite.co.il/snippet
בכדי לראות את רשימת הפוסטים שיצרתם.
ההיררכיה של טעינת הקבצים בוורדפרס עובדת בצורה הבאה: במידה וקיים קובץ בשם archive-[post_type].php
– או במקרה שלנו archive-snippet.php
וורדפרס תשתמש בקובץ זה על מנת להציג את ארכיון הפוסטים של סוג התוכן המדובר. במידה וקובץ זה אינו קיים (והוא אינו קיים כברירת מחדל), וורדפרס תשתמש בקובץ archive.php
בכדי להציג את התוכן. וכשזה לא קיים תשתמש בקובץ index.php
.
לכן, במידה ואתם רוצים לשנות את מבנה דף הארכיון של סוג התוכן snippet שיצרנו, נכון יהיה ליצור קובץ חדש בתבנית שלכם בשםarchive-snippet.php
ולהעתיק אליו את הקוד מ archive.php
. כעת תוכלו לשנות את הקובץ החדש שיצרתם בהתאם לדרישות העיצוב כאוות נפשכם.
הצגת דף הפוסט עצמו של סוג התוכן שיצרתם
בדומה לדרך בה עובדת ההיררכיה עבור עמוד הארכיון, כך גם עובדת ההיררכיה עבור דף הפוסט עצמו. כשאני אומר דף הפוסט אני מתכוון לעמוד המציג את סוג התוכן שיצרתם, כלומר – העמוד שיוצג כשתלחצו על כל אחד מהפוסטים בדף הארכיון.
במקרה של דף זה, וורדפרס כברירת מחדל תשתמש בקובץ single.php
על מנת להציג את העמוד. אם תרצו לעצב או לשנות את ההתנהגות או המבנה של אותו עמוד, צרו קובץ חדש בשם single-snippet.php
בתבנית שלכם, העתיקו אליו את הקוד מ single.php
ובצעו את השינויים כרצונכם.
הצגת הפוסטים באמצעות הלולאה של וורדפרס
במקרים רבים, תרצו להציג רשימה של הפוסטים של סוג תוכן מסויים בתבנית עמוד משלכם (page template). כאשר עושים זאת, הדרך הנוחה ביותר להציג את אותה רשימה היא באמצעות WP_Query והלולאה של וורדפרס.
לא נרחיב על הלולאה של וורדפרס במאמר זה, אך בכדי להציג את רשימת הפוסטים של סוג תוכן מסויים בתבנית עמוד כלשהו תשתמשו בקוד הבא:
<?php
if ( get_query_var( 'paged' ) ) {
$paged = get_query_var( 'paged' );
}
if ( get_query_var( 'page' ) ) {
$paged = get_query_var( 'page' );
}
$query = new WP_Query( array( 'post_type' => 'snippet', 'paged' => $paged ) );
if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="entry">
<h2 class="title"><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php endwhile;
wp_reset_postdata(); ?>
<!-- show pagination here -->
<?php else : ?>
<!-- show 404 error here -->
<?php endif; ?>
תוכלו לשנות את סוג התוכן שיוצג בשורה מספר 9. כמו כן, המשתנה
$paged
נחוץ בכדי שהעימוד הממוספר יעבוד כראוי (Pagination).
נספח – סוגי תוכן מותאמים והתוסף Elementor
אלמנטור הוא Page Builder המגיע בצורת תוסף ותופס תאוצה בשנה האחרונה בעולם בניית האתרים. הוא מאפשר לבצע שימוש באותם סוגי תוכן שיצרתם ללא התעסקות בקוד.
ניתן באמצעות אלמנטור ליצור תבניות (Page Templates) לעמוד ארכיון ולעמוד פוסט עבור סוגי התוכן שיצרתם. הסבר על כיצד לעשות זאת הוא מעבר לסקופ של פוסט זה.
מילים אחרונות
כפי שאתם רואים, יצירת סוגי תוכן והרחבת האפשרויות לניהול התוכן בוורדפרס הוא תהליך די פשוט עקב האופי המודולרי של המערכת והפונקציות שהיא מספקת.
ההבנה מתי נכון להשתמש בסוג תוכן מותאם, מתי להשתמש בטקסונומיות, וחשוב מכל – מתי אין להשתמש בהם דורשת מעט ניסיון. הדרך היחידה לללמוד היא על ידי עשייה, אז גשו ותתחילו בניסויים…