דילוג לתוכן
תבניות

תבנית בלוקים לא נטענת? תתחילו מבסיס הנתונים

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

פורסם

כמעט בוודאות מתעלמים מקובץ התבנית שלכם כי עותק בבסיס הנתונים מנצח. ברגע שאתם פותחים תבנית בעורך האתר ולוחצים שמירה, WordPress כותב רשומת wp_template, ומאותו רגע הרשומה הזו מוגשת במקום קובץ ה-.html שבתיקיית הערכה — כך שכל שינוי שתעשו בקובץ אחר כך לא ייראה באתר. מחיקת הרשומה הזו היא הפתרון, וזה הדבר הראשון לבדוק לפני שאתם נוגעים בהיררכיה, בשם הקובץ או במטמון.

לוודא שהעותק בבסיס הנתונים קיים

היכנסו למראה ← עורך ← תבניות. כל תבנית ש-WordPress מגיש מבסיס הנתונים מסומנת ברשימה — תלוי בגרסת WordPress שלכם, התווית תיקרא “מותאמת אישית” או שהתבנית תופיע תחת מסנן של תבניות מותאמות. התווית הזו היא כל התשובה. אם היא שם, לא משתמשים בקובץ שלכם.

אפשר לבדוק את אותו דבר משורת הפקודה, וזה מהיר יותר ועובד גם כשעורך האתר מתנהג מוזר:

wp post list --post_type=wp_template --fields=ID,post_name,post_status,post_title
wp post list --post_type=wp_template_part --fields=ID,post_name,post_status,post_title

כל שורה היא עקיפה בבסיס הנתונים. הערך של post_name תואם למזהה התבנית, כך ששורה בשם single מסתירה את templates/single.html.

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

איך מוחקים

בעורך האתר, פתחו את תפריט האפשרויות של התבנית (שלוש הנקודות לידה) ובחרו ניקוי התאמות אישיות — בחלק מהגרסאות התווית היא איפוס. זה מוחק את הרשומה בבסיס הנתונים והשליטה חוזרת לקובץ שבדיסק.

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

מ-WP-CLI, בעזרת מזהה מהרשימה שלמעלה:

wp post delete 482 --force

תהיו כנים עם עצמכם לגבי המחיר: ניקוי התאמות מוחק לצמיתות את כל מה שבניתם בעורך האתר עבור אותה תבנית, ואי אפשר לשחזר. אם בגרסה של עורך האתר יש עבודה אמיתית, העתיקו קודם את תגיות הבלוקים החוצה — פתחו את התבנית בעורך, עברו לתצוגת הקוד, והדביקו את התוצאה לתוך קובץ ה-.html שלכם. כך הקובץ הופך למקור האמת ושום דבר לא הולך לאיבוד.

איך WordPress בוחר תבנית

ערכות בלוקים משתמשות באותה לוגיקת היררכיה של ערכות קלאסיות, רק עם קובצי .html בתוך templates/ במקום קובצי .php בשורש הערכה. WordPress הולך מהספציפי ביותר לכללי ביותר ומשתמש בקובץ הראשון שקיים.

מה מוצגסדר הבדיקה
פוסט בודדsingle-post-{slug}.htmlsingle-post.htmlsingle.htmlsingular.htmlindex.html
עמודpage-{slug}.htmlpage-{id}.htmlpage.htmlsingular.htmlindex.html
ארכיון קטגוריהcategory-{slug}.htmlcategory-{id}.htmlcategory.htmlarchive.htmlindex.html
סוג תוכן מותאםsingle-{post-type}.htmlsingle.htmlsingular.htmlindex.html
עמוד 404404.htmlindex.html

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

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

תבנית מול חלק תבנית

תבנית מציגה תצוגה שלמה ונבחרת על ידי ההיררכיה. חלק תבנית הוא קטע — כותרת עליונה, כותרת תחתונה, סרגל צד — שתבניות מושכות פנימה. חלקים יושבים ב-parts/, תבניות יושבות ב-templates/, והם נשמרים בנפרד בבסיס הנתונים כרשומות wp_template_part.

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

גם ההפך קורה. אתם שמים פריסת עמוד מלאה בתוך parts/ ותוהים למה ההיררכיה אף פעם לא בוחרת בה. חלקים בכלל לא מועמדים בהיררכיה; שום דבר לעולם לא ינותב אליהם ישירות.

שמות קבצים ומיקום

בדקו את אלה לפני שאתם מניחים משהו אקזוטי יותר:

  • התיקייה היא templates/, ברבים, בשורש הערכה. לא template/, ולא block-templates/. השם block-templates/ היה הנכון בתקופת תוסף Gutenberg, לפני שערכות בלוקים נחתו בליבה, והמון מדריכים עדיין מציגים אותו — הוא לא עובד ב-WordPress הנוכחי.
  • חלקי תבנית נכנסים ל-parts/, לא ל-template-parts/ (שזו המוסכמה של ערכות קלאסיות לקבצים חלקיים ב-PHP).
  • הסיומת היא .html. מתעלמים מקובץ .php בתוך templates/.
  • שמות הקבצים באותיות קטנות ועם מקפים. single-Post.html או single_post.html לא יתאימו. במערכת קבצים שלא מבחינה בין אותיות גדולות לקטנות, כמו ב-macOS, זה עובד מקומית ונשבר על שרת Linux — כישלון קלאסי של “אצלי במחשב זה עובד”.
  • הקובץ templates/index.html חייב להתקיים. בלעדיו WordPress לא מסווג את הערכה כערכת בלוקים ועורך האתר עלול לא להופיע בכלל.
  • אם אתם עובדים בערכת בת, התבניות שלה קודמות לאלה של ערכת האב. קובץ שנשכח בערכת הבת ינצח בשקט את קובץ האב שאתם עורכים.

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

מטמון — לבדוק אחרון

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

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

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

עדיין תקועים?

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

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

FAQ

שאלות

למה תבנית הבלוקים שלי לא נטענת בוורדפרס?

בדרך כלל בגלל שעותק שמור בבסיס הנתונים דורס את הקובץ. ברגע שאתם עורכים תבנית בעורך האתר ולוחצים שמירה, WordPress יוצר רשומת wp_template ומגיש אותה במקום קובץ ה-html שבתיקיית הערכה. כל שינוי בקובץ מאותו רגע ואילך פשוט לא נראה באתר.

איך גורמים לוורדפרס להשתמש בקובץ של הערכה במקום בגרסת עורך האתר?

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

לאן נכנסים קבצי תבניות בלוקים בערכת נושא?

תבניות שלמות נכנסות לתיקיית templates בשורש הערכה, וקטעים לשימוש חוזר נכנסים לתיקיית parts. שתיהן משתמשות בסיומת html, בשמות קבצים באותיות קטנות ובמקפים ולא בקווים תחתונים. ערכת בלוקים גם חייבת שיהיה בה templates/index.html, אחרת WordPress לא יתייחס אליה כערכת בלוקים בכלל.

מה ההבדל בין תבנית לחלק תבנית?

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

האם מטמון גורם לתבניות בלוקים לא להתעדכן?

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

למה התבנית לפי מזהה העמוד הפסיקה לעבוד?

תבניות מבוססות מזהה מותאמות למזהה הנוכחי של הפוסט בזמן הבקשה. שינוי שם של עמוד משנה את המזהה שלו, כך ש-page-about.html מפסיק להתאים בשקט ברגע שהעמוד הופך ל-about-us. אותו דבר נכון לתבניות של קטגוריות ותגיות. או שמשנים את שם הקובץ כך שיתאים למזהה החדש, או שמשייכים את התבנית במפורש בסרגל הצד של עורך התוכן.