העברת משתנים באמצעות get_template_part בוורדפרס

כאשר משתמשים בפונקציה get_template_part, המשתנים מקובץ ה php שקורא לה אינם עוברים ל template part עצמו.

בדומה לפונקציות ה include() או require() הסטנדרטיות ב php, וורדפרס מציגה פונקציה משל עצמה על מנת לטעון templates (php files) וזאת נקראית get_template_part() וכשמה כן היא, נועדה על מנת לקרוא לחלקים של תבניות (template parts) באתרי וורדפרס.

בזמן ששימוש בפונקציה get_template_part() מספק את מה שאנו צריכים ברוב המקרים, ישנם מצבים בהם השימוש בזו מקשה על מפתחים. אם נדייק, אין אפשרות להעביר משתנים (php variables) ל template part לה אנו קוראים באמצעות get_template_part(). בואי ניתן מבט על מספר דוגמאות בסיסיות וניתן גם פתרון לבעיה.

במקרה שלי נתקלתי בבעיה זו כאשר רציתי להעביר משתנים של Advanced Custom Fields ל template part מסויים.

מדוע להשתמש ב get_template_part ?

במילה אחת (בעצם שתיים) – תבנית בת. אם אתם מעוניינם לשנות קבצים בתבנית שלכם באמצעות תבנית בת, השימוש ב get_template_part() בא לעזרתכם.

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

הנה דוגמא בסיסית לקובץ content.php:

הבעיה עם משתנים ב get_template_part

עכשיו, מה אם יש לנו משתנים בקובץ loop.php ואנו רוצים להשתמש בהם בתוך הקובץ content.php לו אנו קוראים באמצעות get_template_part()? תנו מבט בדוגמא הבאה:

כאשר ננסה להשתמש במשתנה $example בתוך content.php הוא פשוט לא יעבוד לנו.

הפיתרון – להשתמש ב include ובפונקציה locate_template

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

מכאן, שהשימוש ב locate_template() יחד עם הפונקציה include() של php, ייתן לנו את התוצאה הרצויה, תנו מבט:

כעת, כאשר ננסה להשתמש במשתנה $example בתוך content.php, הכל יעבוד כשורה…

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

רועי יוסף

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

תגובות פייסבוק

{ 0 תגובות… הוסף אחת }

השאירו תגובה

כבר הולכים ? הרשמו לרשימת התפוצה !

הכניסו את האימייל שלכם וקבלו עדכונים חודשיים על מאמרים, טיפים ומדריכים חדשים !

לעולם לא נשתף את הפרטים שלכם...

קראו גם את:
הטמעת כפתור waze וורדפרס
כיצד להטמיע כפתור ניווט Waze באתר וורדפרס ?

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