אם אתם מפתחי תבניות וורדפרס או משתמשים בתבנית בת בכדי לשנות תבנית כזו או אחרת, סביר להניח כי תגיעו לנקודה בה תאלצו להבין את ההיררכיה של תבניות וורדפרס.
אותה היררכיה מכתיבה איזו תבנית תהיה בשימוש בכדי להציג סוגי תוכן שונים. זו תקח בחשבון את כלל סוגי התוכן, למשל פוסטים, עמודים, סוגי תוכן מותאמים וטקסונומיות, ומעבר לכך מאפשרת לכם אף ליצור תבניות יחודיות לעמודים ספציפיים.
אך היררכיה זו יכולה מעט לבלבל. למשל, כאשר מסתכלים על ארכיון של טקסונומיה שמקושר לסוג תוכן מותאם כלשהו, באיזו תבנית עלינו להשתמש? וכיצד התבניות עובדות עבור פוסטים יחידים?
בפוסט זה ניתן מבט על אותה היררכיה בתבניות וורדפרס, נסביר כיצד זו עובדת ונציג מספר דוגמאות. השאיפה היא כי בסיום מדריך זה תוכלו ליצור תבניות תוך כדי שמירה על מבנה היררכי נכון.
לצורך הבהרה – ההתייחסות למילה תבנית בפוסט זה הינה לתבנית עמוד (page template) ולא לערכת הנושא (theme) בה אתם משתמשים. הנה פוסט קצר על כיצד ליצור תבנית עמוד חדשה, כלומר תבנית עמוד מותאמת בוורדפרס.
היררכיה של תבניות עמוד – סוגי תבניות
אם ננסה לתאר בפשטות – עמודים בוורדפרס מורכבים מקבצי תבנית שונים ולאלו ניתן לקרוא באמצעות הפונקציה ()get_template_part. כל קובץ מייצג חלק אחר בעמוד, וביחד אלו מרכיבים את כל התוכן עבור עמוד מסויים אשר נקבע ומוגדר על ידכם מממשק הניהול של וורדפרס.
אך הבחירה איזו תבנית עמוד תהיה בשימוש מבוססת על אותה היררכיה רובסטית שהזכרנו קודם לכן ובהיררכיה זו, תבנית ברירת המחדל מוחלפת בתבנית ספציפית יותר. אני בטוח שדוגמה במקרה זה תסביר טוב יותר…
נאמר ומשתמש כלשהו מבקר בעמוד “http://domain.co.il/author/roee”. וורדפרס תחפש תחילה תבנית עמוד (קובץ) בשם author-roee.php
. אם קובץ זה אינו קיימת וורדפרס תחפש קובץ בשם author.php
. אם זה לא קיים ונמשיך לעלות בהיררכיה, וורדפרס תחפש את archive.php
ואחריו את index.php
בכדי לרנדר ולהציג את העמוד.
בכל פעם שמשתמש מבקר בעמוד מסויים וורדפרס נעה במעלה ההיררכיה עד שתמצא את הקובץ המתאים כאשר לשם הקובץ כפי שהבנתם משמעות רבה והוא זה הקובע אם יש להשתמש בקובץ זה או לא וזאת בהתאם לאותה היררכיה שהזכרנו.
קבצי תבנית הכרחיים
עניין שחשוב לדעת לגבי ערכות נושא (Themes או תבניות) בוורדפרס, הוא שישנם קבצים שחייבים להיות קיימים על מנת שערכת נושא תוכל לעבוד.
למשל הקבצים index.php
ו style.css
הם הכרחיים. הראשון הוא תבנית העמוד הגבוהה ביותר בהיררכיית תבניות העמוד וזה יהיה בשימוש כאשר וורדפרס לא תמצא תבנית עמוד ספציפית יותר (עוד על כך בהמשך).
השני הוא קובץ העיצוב הנדרש להכיל מידע בסיסי על ערכת הנושא בה אתם משתמשים כגון: שם ערכת הנושא, תיאור, ומחבר ערכת הנושא. מכיוון ושני קבצים אלו אינם תבניות עמוד לא נחפור בהם יותר מדי אך חשוב לדעת כי הם קיימים.
אם נוציא נכסים למינהם מהמשוואה (קבצי Javascript וקבצי CSS), ניתן לומר שכל הקבצים הקיימים בתיקייה של ערכת הנושא הם קבצי תבנית כאלו או אחרים ואלו מתחלקים לשתי קבוצות: אלו שמחוץ ללולאה של וורדפרס ואלו שמכילים את הלולאה של וורדפרס.
הלולאה של וורדפרס קיימת על מנת למשוך תוכן ממסד הנתונים (הנשמר דרך ממשק הניהול) ולרנדר אלו לדפים ממשיים באתר שלכם.
עוד נסביר על הקבצים שמכילים את הלולאה בהרחבה אך חשוב לציין גם את אותם קבצים שמחוץ ללולאה של וורדפרס. בהסבר על קבצים אלו, שימו לב במיוחד לשמות הקבצים (naming convention) מכיוון לפי אלו וורדפרס יודעת באיזו תבנית עמוד להשתמש ומתי.
קבצי תבנית שמחוץ ללולאה
כשאני מדבר על קבצים מחוץ ללולאה של וורדפרס, אני מתכוון לקומפוננטות בעמוד אשר מחוץ לתוכן המרכזי של אותו עמוד (אלו שאתם מכניסים כשאתם עורכים את התוכן). אלו כוללים את ההאדר והפוטר. ההאדר מכיל את ה HTML ותגיות המטא שאתם רוצים להוסיף לפני התוכן והפוטר מכיל את אלו שאחריו.
קובץ ההאדר נקרא header.php
וקובץ הפוטר נקרא footer.php
. שני קבצים אלו הם קבצים הכרחיים לערכת הנושא אך קיימים מחוץ ללולאה של וורדפרס.
קובץ תבנית נוסף שחשוב הינו sidebar.php
. בקובץ זה משתמשים עבור שמגיע מחוץ לעורך התוכן של וורדפרס. לעיתים קרובות, בצד שמאל או ימין של העמוד אך יכול בעצם להופיע בכל מקום שתרצו. זהו המקום שבדרך כלל תבניות מציגות את הווידג׳טים ומידע חיצוני נוסף.
בנוסף, קיים הקובץ comments.php
כאשר קובץ זה אחראי לאותן תגובות שאתם מוצאים בסוף מרבית הפוסטים שאתם קוראים. קובץ זה יכול להיות מעט מורכב, אך בבסיסו – הוא פשוט מכיל קוד HTML ו PHP שמתאר כיצד התגובות ייראו באתר וורדפרס שלכם.
הקבצים שמחוץ ללולאה הם קבצים חשובים, אך המבנה המרכזי של אתרי וורדפרס תלוי באותם קבצי תבנית שמכילים את התוכן הממשי, כלומר אלו שנמצאים בתוך הלולאה של וורדפרס.
ההחלטה באיזה קובץ על וורדפרס להשתמש תלויה בסדר ההיררכי של עמודי התבנית ובשמות הקבצים בערכת הנושא בה אתם משתמשים.
עמוד דף הבית (Front Page)
סביר להניח כי עמוד הבית הוא אחד העמודים החשובים בבערכת הנושא שלכם. כאשר משתמש מבקר בעמוד הבית שלכם, וורדפרס תחפש את הקובץ index.php
על מנת לרנדר את העמוד.
אך לקובץ זה משמעות חזקה יותר מאשר לרנדר את עמוד הבית בלבד. קובץ זה יהיה בשימוש בכל סיטואציה בה וורדפרס אינה מוצאת קובץ ספציפי לתבנית מסויימת.
עמודי ארכיון, עמודים יחידים (single.php
) וכדומה ישתמשו בקובץ index.php
אלא אם לא נמצא קובץ ספציפי יותר בערכת הנושא שלכם. נרחיב מעט יותר בנושא בהמשך, כרגע חשוב שתזכרו כי index.php
הוא קובץ חיוני ונחוץ.
אז בכל אופן, ישנם שני קבצים להם השפעה על עמוד הבית והם home.php
ו front-page.php
כאשר לשני שציינו מבינהם עדיפות על הראשון. אם הקובץ front-page.php
אינו קיים וורדפרס תשתמש ב home.php
או ב page.php
וזאת בהתאם למה שקבעתם בהגדרות > קריאה בממשק הניהול (פוסטים אחרונים או עמוד סטטי).
אם אחד מקבצים אלו נמצאים בערכת הנושא שלכם, הם ידרסו את הקובץ index.php
ויקבלו עדיפות כאשר התוכן מרונדר בעמוד הבית. אך זכרו, כי index.php
ו front-page.php
יכולים להכיל את אותו קוד וירנדרו את עמוד הבית בדיוק אותו דבר.
עם זאת, front-page.php
יהיה בשימוש אך ורק עבור עמוד הבית כאשר index.php
יהיה בשימוש כברירת המחדל לשאר העמודים. אז ההיררכיה של עמוד הבית לאתר שלכם תראה בצורה הבאה, כאשר קובץ העליון ברשימה ספציפי יותר ועדיף על אלו שמתחתיו:
/*** Homepage Hierarchy ***/
front-page.php
home.php
page.php
index.php
עמודי ארכיון (Archive Pages)
עמודי ארכיון אלו עמודים שמציגים רשימה של פוסטים הנמשכים מ״קבוצה״ מסויימת. עמודים אלו כוללים בתוכם את עמודי המחבר (author pages), עמודי קטגוריה, עמודי תאריך (date pages) וכל רשימה אחרת של פוסטים שישנו הגיון בליצור מהם קבוצה.
תבנית ברירת המחדל עבור עמודי ארכיון הינו הקובץ archive.php
. אם אין תבנית ספציפית יותר עבור עבור עמודים אלו, הקובץ archive.php
יהיה בשימוש. קובץ זה אינו באמת הכרחי ואם אינו נמצא בערכת הנושא שלכם – וורדפרס תשתמש בקובץ index.php
על מנת לרנדר את עמודי הארכיון.
עם זאת, נכון יהיה לוודא שלפחות הקובץ archive.php
קיים אם אין בערכת הנושא קבצים ספציפיים יותר עבור קבוצה כזו או אחרת. כמובן, גם במקרה זה קיימות תבניות ספציפיות יותר שקיימות עמוק יותר בהיררכיה וניתן להשתמש בהן על מנת לדרוס את הקובץ archive.php
.
ההיררכיה של עמודי ארכיון היא די פשוטה:
/*** Archive Hierarchy ***/
archive.php
index.php
עמוד מחבר (Author Page)
עמודי מחבר (Author Pages) הם ״תבניות משנה״ לתבנית הארכיון ואלו מראים אך ורק את רשימת הפוסטים של מחבר מסויים. לדוגמה, משתמש יכול לגשת לכתובת “http://yoursite.co.il/author/roee” ובכך לראות את כל הפוסטים שנכתבו על ידי המחבר roee.
כברירת מחדל, וורדפרס תשתמש בקובץ archive.php
עבור עמודים אלו, אך אם אתם מעונייים להיות יותר ספציפיים, תוכלו ליצור קובץ בשם author.php
. אם תעשו זאת עמודי המחבר ישתמשו בקובץ author.php
על מנת לרנדר את העמוד וידרסו את הקובץ archive.php
.
אך במקרה זה אתם יכולים להיות אף יותר ספציפיים ולהוסיף קובץ שירנדר את התוכן בצורה שונה עבור מחבר מסויים. זאת ניתן לעשות על ידי יצירת קובץ בשם author-[id].php
או author-[nicename].php
. בדוגמה שהצגנו מעלה, יכולנו ליצור קובץ בשם author-roee.php
בכדי לדרוס גם את archive.php
וגם את author.php
ולהציג את התוכן.
הדוגמה של עמודי מחבר היא דוגמה מצויינת בכדי להבין כיצד עובדת ההיררכיה של בוורדפרס:
/*** Author Hierarchy ***/
author-[nicename].php
author-[id].php
author.php
archive.php
index.php
עמוד קטגוריה (Category Page)
עמודי הקטגוריה עובדים באותה צורה כמו עמודי המחבר. לדוגמה, אם אתם מבקרים בכתובת “http://yoursite.com/category/my-category” – אז כברירת מחדל וורדפרס תשתמש ב archive.php
. אך אם תצרו קובץ בשם category.php
הוא ידרוס את ברירת המחדל ווורדפרס תשתמש בקובץ זה על מנת לרנדר את העמוד.
בדומה לעמודי המחבר, יש באפשרותכם לציין את הקטגוריה באמצעות category-[slug].php
או category-[id].php
. בשני המקרים, אלו יקבלו עדיפות על פני הקובץ category.php
.
ההיררכיה של עמודי קטגוריה הינה זהה לעמודי המחבר:
/*** Category Hierarchy ***/
category-[slug].php
category-[id].php
category.php
archive.php
index.php
עמודי ארכיון נוספים
אני מקווה שהדוגמאות מעלה עוזרות לכם להבין כיצד ההיררכיה של עמודי ארכיון עובדת. אך היררכיה זו אינה רלוונטית אך ורק עבור עמודי המחבר ועמודי הקטגוריה. למעשה, היא עובדת עבור כל טקסונומיה בוורדפרס.
לדוגמה, אם אתם רוצים ליצור תבנית שמיושמת רק עבור עמודי התגיות (tags), תוכלו ליצור קובץ בשם tag.php
או אף tag-[id].php
אם אתם רוצים לרדת לעלות בהיררכיה. כנ״ל לגבי עמודי תאריך, באפשרותכם ליצור קובץ בשם date.php
.
ישנה חריגה אחת מן הכלל וזאת כאשר מתייחסים לעמודי ארכיון של סוגי תוכן מותאמים (Custom Post types). כשאר המצבים, archive.php
יהיה קובץ ברירת המחדל, אך אם אתם מעוניינים ליצור תבנית ספציפית עבור עמוד הארכיון של סוג תוכן מותאם מסויים, יש ליצור קובץ בצורה הבאה archive-[post_type_name].php
.
מעבר לחריגה זו, הכל עובד בדיוק אותו דבר. אם אתם מעוניינים לצפות ברשימה מלאה של שמות הקבצים או בעצם ה Naming Conventions עבור עמודי ארכיון ובכלל, תנו מבט ה WordPress Codex.
עמודים יחידים (Single Pages)
כעת, כשאנו מבינים כיצד עובדת ההיררכיה של עמודי ארכיון נמשיך לעמודים היחידים (Single Pages) באתר וורדפרס. אלו כוללים עמודים אינדיבידואלים כגון: עמודים סטטיים (Pages), עמודי פוסטים (Single Posts), עמודי קובץ (attachment) ופוסטים של סוגי תוכן מותאמים כאלו ואחרים.
עמודי פוסטים
בעמודי פוסטים הכוונה היא לכל עמוד אינדיבידואלי שנופל תחת סוג התוכן שנקרא Posts או תחת סוג תוכן מותאם שיצרתם. התבנית הכללית עבור עמודים אלו הינה הקובץ single.php
. אם רק קובץ זה קיים בערכת הנושא שלכם, אז כל הפוסטים האינדיבידואלים כולל עמודי קובץ וסוגי תוכן מותאמים היו משתמשים בקובץ זה כתבנית.
יש לציין כי קובץ זה אינו הכרחי – אם אינו קיים וורדפרס תשתמש בקובץ
index.php
בכדי לרנדר את התוכן.
אם אתם מעוניינים להגדיר תבנית עבור סוג תוכן מותאם ספציפי, אתם יכולים ליצור קובץ בשם single-[post_type_name].php
. לדוגמה, אם לצורך העניין סוג התוכן נקרא "Portfolio" אז שם הקובץ צריך להיות single-portfolio.php
.
ישנה גם האפשרות להיות יותר ספציפיים עם עמודי קובץ (attachments) על ידי שימוש בקובץ attachment.php
. מבחינת עמודי קובץ ניתן אף לרדת עמוק יותר ולקבוע תבנית לפי סוג הקובץ המדובר (MIME Type), לדוגמה image.php
או video.php
.
בסופו של דבר, ההיררכיה של עמודים נראית כך:
/*** Single Post Hierarchy ***/
image.php (or video.php, text.php, etc.)
attachment.php
single-attachment.php
single-[post_type_name].php
single.php
index.php
עמודים סטטיים
עמודים הם מקרה מעט שונה, וכשאני אומר עמודים אני מתכוון לכל התוכן היושב תחת סוג התוכן ״Pages״ בוורדפרס. כשאר סוגי התוכן, יש באפשרותכם האופציה לקבוע תבנית ברירת מחדל בשם page.php
. גם במקרה זה קובץ זה אינו חובה ובמידה וחסר וורדפרס תשתמש בקובץ index.php
.
שלא כעמודי פוסטים שהזכרנו קודם, בעמודים ישנה האפשרות ליצור תבנית ספציפית לעמוד מסויים על ידי page-[id].php או page-[slug].php
. תבניות אלו יהיו בשימוש רק עבור אותו עמוד ספציפי שהגדרתם בשם הקובץ, בין אם לפי ID או לפי slug. כל שאר העמודים ישתמשו ב page.php
.
אך במקרה של עמודים ישנה האופציה לבחור את תבנית העמוד דרך ממשק הניהול. אני מדבר על מאפייני עמוד > תבנית עמוד במסך העריכה של העמוד. במקרה שבחרתם תבנית (Custom Template) בחלק זה, היא תדרוס כל תבנית אחרת שקיימת עבור אותו עמוד ומכאן שהיא החזקה ביררכיה.
ההיררכיה של עמודים נראית כבדוגמה הבאה:
/*** Page Hierarchy ***/
custom template
page-[slug].php
page-[id].php
page.php
index.php
תבניות עמוד נוספות
התבניות עליהן דיברנו במדריך זה מכסות כמעט את כל סוגי התכנים בכל אתר וורדפרס. עם זאת, ישנן שתי תבניות שלא ציינו עדיין. הראשונה היא 404.php
אשר תוצג במקרה ששהעמוד לא נמצא או ישנה טעות בכתובת.
התבנית השנייה שלפעמים תראו הינה search.php
. תבנית זו אחראית להצגה של תוצאות החיפוש באתר הוורדפרס שלכם. זאת יכולה להיות מנוהלת גם על ידי הקובץ index.php
בתבניות מסויימות.
לסיכום
היררכיה של תבניות עמוד בוורדפרס היא מעין רפרנס. ישנה קונבנציה לשמות הקבצים שעליכם לעקוב אחריה והיא נכנסת במקום בו אתם מפתחים או מבצעים קוסטומיזצייה לתבניות וורדפרס.
סביר להניח כי בתבניות פרמיום או תבניות שנבנו על ידי מפתחים כאלו או אחרים, תמצאו גם שעמוד התבנית עצמו מחולק לקבצים על ידי שימוש בפונקציה ()get_template_part שהזכרנו בתחילת המדריך.
אך עם זאת, אני בטוח שלאחר קריאת מדריך זה תגלו שזה די פשוט להבין כיצד מורכבות ערכות הנושא בוורדפרס, וחשוב מזה – כיצד אתם יכולים לבצע מודיפיקציה לאותן ערכות נושא.
רועי, אז איזה אחלה פוסט! איך הסברת את ההיררכיה בצורה מקיפה ויסודית! מעניין, איך בכלל החלטת לכתוב פוסט על זה?
ויש לי עוד שתי שאלות:
1. מה זה home.php? מעניין אותי במיוחד להבין מה ההבדל בין זה ל- front-page.php.
2. מה קורה כששם הקטגוריה הוא בעברית? אני מניחה שאז אי אפשר ליצור category-[slug].php.
ורק לתרום איזה 2 סנטים: אם משתמשים בתבנית מורכבת שקשה לעקוב בה אחרי כל הקבצים, וגולשים בעמוד כלשהו ורוצים לדעת איזה קובץ מרנדר את העמוד הזה, אז יש לשאלה הזאת ב-WPSE כמה וכמה תשובות מעניינות.
תודה על פוסט מצוין.
היי לאה 🙂
הוספתי הסבר (שהיה חסר) לגבי home.php במדריך אך בכל אופן אנסה להסביר גם כאן:
כאשר קיים, frontpage.php יהיה בשימוש בכל מקרה עבור עמוד הבית. אם וורדפרס לא מוצאת קובץ זה וורדפרס תשתמש או ב home.php או ב page.php בהתאם להגדרות הקריאה. home.php יהיה בשימוש בסיטואציה זו כאשר הגדרות התצוגה לעמוד הבית מכוונות לפוסטים האחרונים. בנוסף, home.php יהיה בשימוש כאשר ״עמוד הפוסטים״ כאשר דף בית סטטי מוגדר בהגדרות הקריאה.
תודה אגב גם על התיקון בהקשר של קבצי תבנית הכרחיים, אכן functions.php אינו הכרחי ו index.php כן הכרחי…
תודה רבה על ההסבר ועל התיקון!
היי רועי,
מה לגבי ווקומרס, איך ההיררכיה שם?
באותו אופן…
המוצרים (Products) הם סוגי תוכן (CPTs) – ולכן, archive-product.php יהיה הארכיון, single-product.php יהיה עמוד ומצר יחיד וכדומה….