דריסת פונקציות בתבנית אב על ידי תבנית בת

דריסת פונקציות בעזרת תבנית בת – וורדפרס

לתבניות בת בוורדפרס פונקציונליות המאפשרת לרשת (מהמילה ירושה) תבניות ופונקציות מתבנית אחרת. על ידי שימוש בתבנית בת באפשרותכם לרשת את כל הגדרות העיצוב (css) מתבנית האב ולבצע שינויים כאוות נפשכם.

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

כאשר אתם יורשים תבנית אב, אתם נדרשים להוסיף את style.css ואת functions.php בתבנית הבת. שאר הקבצים של התבנית נורשים מתבנית האב, אם תוסיפו תבנית דף (page template) לתבנית הבת היא תדרוס את תבנית הדף של תבנית האב. דריסה זו אינה מתבצעת לקובץ functions.php, קובץ זה הוא היחיד שנטען גם מתבנית האב וגם מתבנית הבת.

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

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

<?php
function display_social_links()
{
     ?>
         <a href="http://www.facebook.com">Facebook</a>
     <?php
}
?>

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

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

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

<?php
function display_social_links()
{
     ?>
         <a href="http://www.facebook.com">Facebook</a>
         <a href="http://www.twitter.com">Twitter</a>
     <?php
}
?>

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

<?php
if( !function_exists('display_social_links') )
{
    function display_social_links()
    {
        ?>
            <a href="http://www.facebook.com">Facebook</a>
        <?php
    }
}
?>

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

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

יש לכם דרך טובה יותר / הצעות / רעיונות ? שתפו אותנו שכולנו נלמד… 🙂

רועי יוסף

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

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

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

השאירו תגובה

שיתופים
קראו גם את:
אופטימיזציה לקונפיגורציה של וורדפרס באמצעות wp-config.php
אופטימיזציה לקונפיגורציה של וורדפרס באמצעות wp-config.php

משתמשי וורדפרס מכירים את הקובץ wp-config.php כאחד שמחזיק את הגדרות מסד הנתונים של וורדפרס. בקובץ...