ויזואליזציה של היררכיית תבניות עמוד בוורדפרס

הויזואליזציה הנפלאה הזו היא תודות ל wp.hierarchy.com
Archive Page Singular Page Site Front Page Blog Posts Index page Error 404 Page Search Result Page archive.php index.php Author Archive author-$nicename.php $mimetype- $subtype.php author-$id.php author.php tag.php $subtype.php $mimetype.php attachment.php single-$posttype.php single-post.php category-$slug.php $category-$id.php taxonomy- $taxonomy-$term.php taxonomy- $taxonomy.php category.php archive-$posttype.php tag-$slug.php tag-$id.php taxonomy.php date.php Category Archive Custom Post Type Archive Custom Taxonomy Archive Year Archive Month Archive Page Shown On Front Posts Shown On Front Day Archive Date Archive Tag Archive Attachment Post Custom Post Single Post Page front-page.php Custom Template Default Template If selected: $custom.php If selected: $custom.php $custom.php page-$slug.php page-$id.php Static Page Blog Post Page Template single.php page.php home.php 404.php search.php single- $posttype-$slug.php singular.php
קוראים ממכשיר סלולרי? תענוג! אך אתם מפסידים SVG מדליק שמציג את הויזואליזציה בצורה מגניבה...
תבנית ראשית
תבנית משנית
תבנית משתנה
סוג עמוד

היררכיה של תבניות עמוד (Page Templates) בוורדפרס

הבנת ההיררכיה בתבניות הכרחית לכל מפתח וורדפרס.

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

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

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

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

לצורך הבהרה – ההתייחסות למילה תבנית בפוסט זה הינה לתבנית עמוד (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 שהזכרנו בתחילת המדריך.

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

רועי יוסף
רועי יוסף

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

3תגובות...
  • לאה 29 במרץ 2018, 23:16

    רועי, אז איזה אחלה פוסט! איך הסברת את ההיררכיה בצורה מקיפה ויסודית! מעניין, איך בכלל החלטת לכתוב פוסט על זה?

    ויש לי עוד שתי שאלות:

    1. מה זה home.php? מעניין אותי במיוחד להבין מה ההבדל בין זה ל- front-page.php.
    2. מה קורה כששם הקטגוריה הוא בעברית? אני מניחה שאז אי אפשר ליצור category-[slug].php.

    ורק לתרום איזה 2 סנטים: אם משתמשים בתבנית מורכבת שקשה לעקוב בה אחרי כל הקבצים, וגולשים בעמוד כלשהו ורוצים לדעת איזה קובץ מרנדר את העמוד הזה, אז יש לשאלה הזאת ב-WPSE כמה וכמה תשובות מעניינות.

    תודה על פוסט מצוין.

    • רועי יוסף 31 במרץ 2018, 15:44

      היי לאה 🙂

      הוספתי הסבר (שהיה חסר) לגבי home.php במדריך אך בכל אופן אנסה להסביר גם כאן:

      כאשר קיים, frontpage.php יהיה בשימוש בכל מקרה עבור עמוד הבית. אם וורדפרס לא מוצאת קובץ זה וורדפרס תשתמש או ב home.php או ב page.php בהתאם להגדרות הקריאה. home.php יהיה בשימוש בסיטואציה זו כאשר הגדרות התצוגה לעמוד הבית מכוונות לפוסטים האחרונים. בנוסף, home.php יהיה בשימוש כאשר ״עמוד הפוסטים״ כאשר דף בית סטטי מוגדר בהגדרות הקריאה.

      תודה אגב גם על התיקון בהקשר של קבצי תבנית הכרחיים, אכן functions.php אינו הכרחי ו index.php כן הכרחי…

      • לאה 31 במרץ 2018, 22:36

        תודה רבה על ההסבר ועל התיקון!

השאירו תגובה

פעימות
Up!