אחד מהשינויים העצומים ביותר שוורדפרס גרסה 3 הביאה בחובה היא האפשרות הפשוטה והקלה ליצירת custom content type שונים ומשונים באמצעות שימוש ב-register_post_type בתוסף. כך למשל, יצרתי סוג תוכן מסוג 'סרטים':
class YouTubePostType {
// Hooks
function register_activation_hook() {
}
function init() {
register_post_type('youtube',
array(
'label' => __('YouTube'),
'public' => true,
'show_ui' => true,
'supports' => array('thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'title', 'editor'),
'taxonomies' => array('category','post_tag'),
'show_in_nav_menus' =>true,
)
);
register_taxonomy_for_object_type('category', 'youtube');
}
}
אני לא רוצה להכנס לבדיוק איך יוצרים custom content types בוורדפרס כי זה חורג מה-scope שלי במאמר הזה, אפילו שאולי יום יבוא ואני אכתוב על כך. יש לא מעט תוספים בוורדפרס שיוצרים סוגי תוכן ואני מאמין שכמות התוספים האלו תלך ותגדל. הבעיה העיקרית היא שכאשר אנו יוצרים content type ומגדירים שניתן לקטלג אותו לקטגוריות או לתגים – אנו נתקלים במצב שבו הפוסטים החדשים שלנו… פשוט לא מופיעים! למרות שיצרנו פוסט מסוג מסוים ושמרנו אותו לקטגוריה מסוימת, כשאנו נכנסים לקטגוריה הזו, אנו לא יכולים לראות את הפוסט!
לסיפור המרגיז הזה יש פתרון קל ופשוט – פשוט העתיקו את הקוד הבא אל functions.php של התמה שלכם:
/**
* make my custom content type available for archive page
*/
add_filter( 'pre_get_posts', 'my_get_posts' );
function my_get_posts( $query ) {
$query->set( 'post_type', array( 'post', 'MY_CUSTOM_CONTENT_NAME') );
return $query;
}
וכמובן שצריך לשנות את MY_CUSTOM_CONTENT_NAME לשם של התוכן שלכם, אפשר להוסיף שמות נוספים אם יצרתם יותר מתוכן אחד (רק לא לשכוח להפקיד בפסיקים ולשים בין מרכאות!). מה שהקוד הזה עושה בעצם הוא הוספת פילטר לכל לופ שמבקש פוסטים ושינוי השאילתה למסד הנתונים על מנת שיכיל סוגי תוכן חדשים.
אחרי זה כמעט מייד כל ה-custom content type שלכם יוצגו כמו שצריך באתר.