טיפ וורדפרס: הוספת היררכיה בסוג תוכן פוסטים
כברירת המחדל, וורדפרס מגדירה עמודים כבעלי אפשרות למבנה היררכי אחד לשני (עמוד יכול להיות הורה של עמוד אחר), ופוסטים אינם היררכיים. לעתים עולה הצורך לאפשר מבנה היררכי גם בפוסטים, בטיפ קצר ופשוט זה נלמד איך לעשות את זה ע"י הוספת מספר שורות קוד בודדות בערכת העיצוב שלנו, ללא צורך בתוספים
מעט רקע קצר
בסוגי התוכן עמודים המובנה של וורדפרס, אפשר להגדיר מי ההורה של כל עמוד וכך כדי לייצר עץ היררכי בין העמודים, להציג למשל תפריט של עמודי בנים של עמוד מסוים ועוד כהנה וכהנה דברים. הפוסטים, לעומת העמודים, אינם תומכים בשיוך היררכי כזה כברירת מחדל.
בסוגי תכנים מותאמים אישית (CPT) שניתן לרשום במערכת, אפשר ללא בעיה להוסיף תמיכה בהיררכיה של מבנה עץ הורה/בן לסוג התוכן החדש, פשוט ע"י הוספת שורה למערך בעת רישום סוג התוכן (ובשימוש בפונקציה register_post_type). שם זה נעשה בצורה פשוטה, למשל –
[ccwn_php]'hierarchical' => true,[/ccwn_php]
אבל מה קורה אם אם רוצים להוסיף תמיכה היררכית בסוג התוכן פוסטים שמובנה במערכת? הצורה שהזכרתי קודם אפשרית רק בעת רישום סוג תוכן חדש, שאינו מובנה. כדי להוסיף תמיכה כזו לפוסטים, נצטרך לשנות את הערך של hierarchical שכבר מוגדר לפוסט.
אז איך עושים את זה?
הדרך לעשות זאת עבור פוסטים כוללת הוספת מס' שורות קוד בודדות, אותן נוסיף לקובץ הפונקציות בערכת העיצוב שלנו, או לקובץ פונקציות מותאם אישית.
[ccwn_php]
add_filter('init', 'tc_post_hierarchical_support');
function tc_post_hierarchical_support() {
global $wp_post_types;
$h = &$wp_post_types['post']->hierarchical;
$h = true;
add_post_type_support('post', 'page-attributes');
return;
}
[/ccwn_php]
הפונקציה תשנה את הערך hierarchical של מאפיין הפוסט כך שיהיה true (שכאמור הוא כבר מובנה ומוגדר במערכת, וערכו false).
הדבר השני הוא שימוש בפונקציה add_post_type_support כדי להציג בעמוד עריכת פוסט את התיבה של מאפייני עמוד, שתאפשר לנו לבחור יחסי היררכיה ולהגדיר בכל פוסט מיהו ההורה שלו.
4 תגובות »
פיד RSS לתגובות בפוסט | טראקבק
פוסט קצר וקולע. תודה.
.-= פורסם לאחרונה אצל אשרה.. איך מעבירים אתר וורדפרס אחסון בלי להכוות =-.
פוסט מצוין ומועיל.
העתקתי את הקוד לדף הפונקציות, ואכן קיבלתי את האפשרות ליצור סדר בפוסטים וגם היררכיה, אבל לצערי זה לא פועל. דף הפוסטים אינו מגיב לסדר שנתתי בין הפוסטים לבין עצמם.
האם פספסתי משהו?
ייתכן שצריך לעשות שינויים בפרמטרים שאתה מגיש בלופ לשאילתה.
get_posts משתמשת באובייקט של WP_Query ומחזירה מערך של אובייקטים, ואפשר להעביר לאובייקט את הפרמטר הרלוונטי.
אם הכוונה היא רק לסדר ההופעה, אז צריך להעביר פרמטר orderby עם הערך menu_order.
אם מדובר בהצגה של הורה/בן, אחים וכו' – אז מספר ההורה יישמר במאפיין הזה של האובייקט – $post->post_parent (כמו בעמודים)
אפשר להוסיף פרמטר של post_parent ובדרך הזו להחזיר למשל את כל הפוסטים שהם אחים וכדו'
פרטים נוספים יש בקודקס –
http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters
אחלה, תודה.
אני אנסה.