29
באוקטובר
2009

וורדפרס: מניפולציה ושינוי תצוגת כותרת של פוסט

מאת: מאור ברזני | תגובות: 25 | נושאים: וורדפרס,טכנולוגיה
תגיות: , , , , |

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

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

השלבים כדי להגיע לזה יהיו כאלה –

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

פונקצית החלפה – מבנה כללי

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

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

1
<?php str_replace($search, $replace, $subject>; ?>

כלומר – הפונקציה תחפש את מה שכתוב תחת – $search, תחליף אותו עם מה שכתוב ב- $replace, וההחלפה הזאת תבוצע על המחרוזת שכתובה ב- $subject.

תגית הקסם

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

מאחר שאנחנו מעוניינים בשורת רווח, אנחנו מעוניינים בעצם להוסיף קריאה לאלמנט ה-< br > של html. מכיוון שההחלפה תתבצע בכותרת הפוסט, נשתמש בתגית וורדפרס להצגת הכותרת.

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

get_the_title() שמקבלת את כותרת הפוסט אך לא מדפיסה אותו. זה יאפשר לנו לבצע את המניפולציה שאנחנו רוצים, ולהשתמש ב-echo כדי להדפיס אותה על המסך.

את הקוד הבא נכניס בסוף הקובץ functions.php שנמצא בתיקיית התבנית שלנו:

1
2
3
4
5
function replace_title() {
        $replacethese = '##';
        $replacewith = '<br />';
        ec ho str_replace($replacethese, $replacewith, get_the_title());
        }

פונקצית ה"החזרה"

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

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

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

1
2
3
4
5
function normal_title() {
$replacethese = '##';
$replacewith = ' ';
ec ho str_replace($replacethese, $replacewith, get_the_title());
}

הוספת תגית הקסם לכותרות הפוסטים ועדכון קבצי התבנית

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

כעת, כל מה שנותר לנו, הוא לאתר בתבנית שלנו את כל אותם מקומות בהם יש את הקריאה the_title() לכותרת הפוסט. מקומות כאלה יהיו כנראה במרבית הקבצים – index.php, page.php, single.php, archive.php, search.php ובכל מקום בו קיימת קריאה לשם הפוסט.

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

1
<?php the_title(); ?>

בקריאה –

1
<?php  normal_title(); ?>

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

1
<?php replace_title(); ?>

וההחלפה המבוקשת תבוצע.

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

אפשרות נוספת לתגית קסם – הדגשת מילה מסויימת בכותרת הפוסט

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

במקרה הזה, פונקציית ההחלפה תיראה למשל כך:

1
2
3
4
5
function replace_title() {
$replacethese = array('[',']');
$replacewith = array('<strong>','</strong>');
ec ho str_replace($replacethese, $replacewith, get_the_title());
}

ופונקציית ה"החזרה" תיראה כך:

1
2
3
4
5
function normal_title() {
$replacethese = array('[',']');
$replacewith = array(' ',' ');
ec ho str_replace($replacethese, $replacewith, get_the_title());
}

אפשר למשל, בתוך ההחלפה לתגית הקסם, לשים במקום האלמנט <strong> איזשהו <span class="something"> ובקובץ העיצוב style.css לתת צבע אחר, גודל שונה, פונט אחר או כל דבר אחר שעולה על הדעת.

לא כ"כ הבנתם? ניסיתם את זה ולא כ"כ הצלחתם? בשביל זה יש טוקבקים. טקבקו, שאלו ואשמח לעזור לכם ליישם את זה.

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

שתפו גם אחרים:
  • email
  • Print
  • RSS
  • Facebook
  • Twitter
  • LinkedIn
  • Google Bookmarks
  • Live
  • PDF
  • MySpace
  • del.icio.us
  • Digg
  • Technorati
  • Yahoo! Bookmarks
  • Yahoo! Buzz
  • Add to favorites

25 תגובות »

  • מאת חתול:

    למה לא להשתמש בפילטרים כדי לשנות את הכותרת?
    זה יחסוך הרבה עבודה על שינויים בתבנית וגם ימנע בעיות במקרה שנשכח לעדכן חלק מקבצי התבנית.
    פורסם לאחרונה אצל חתול.. ‫גירסה חדשה לתוסף התאריך העברי‬ My ComLuv Profile

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

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

  • מאת חתול:

    זה יהיה קצת ארוך בשביל תגובה. אני אפרסם פוסט על כך.
    פורסם לאחרונה אצל חתול.. ‫גירסה חדשה לתוסף התאריך העברי‬ My ComLuv Profile

  • [...] כתב כיצד ניתן לשחק עם הכותרת של הפוסטים בוורדפרס (מומלץ לקרוא את הפוסט שלו לפני קריאת [...]

  • מאת יוסי:

    תודה על המאמר, כבר נכנס לשימוש :)
    תודה!

  • מאת מטייל:

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

  • יוסי ומטייל – בכיף, שמחתי לעזור :)

  • מאור,

    האם יש לך רעיון לשימוש אמיתי בפונקציה כזו לכותרת? השינוי היחידי שהייתי משער שכותרת צריכה הוא שינוי שיווקי (למטרת SEO או בדיקות שׁa/b) ואז עדיף לשנות בפילטר. מה שגם ככה לא נהיה תלויים בשינויי ועידכוני גירסה.

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

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

  • מאור – בכל מקרה אתה חייב לשנות בכל האתר, אחרת יש לך ## בתוך הכותרות..

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

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

  • מאת דוד:

    תודה וכל הכבוד על ההשקעה.

  • @דוד – תודה על הפידבק.

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

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

  • מאור,

    הפתרון האידיאלי מבחינתי ולדעתי הוא פלאגין – ולא שינוי בקובץ הפונקציה של התבנית.
    אתה צודק בקשר לזה שתבניות כמעט לא מתחלפות – עדיין פלאגאין ייקל עלייך כמפתח.
    פורסם לאחרונה אצל ליאור שיאון.. ‫עידכוני סטטוסים חיים והתראות (live feed vs. notifications)‬ My ComLuv Profile

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

  • מאת חתול:

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

  • @חתול – אם מדברים על תוסף, אז תוסף טוב לדעתי ייכנס בדיוק במקום הלא מוגדר הזה ויאפשר למשתמש בו להחליט כיצד הוא יפעל ויהיה קסטומלי עבורו.
    כלומר, יהיה למשתמש תפריט אפשרויות, בו יוכל המשתמש לקבוע :
    א. היכן הוא רוצה את השינוי (כותרות בכל הקטגוריות או של קטגוריות מסויימות בלבד, וכך גם לגבי פוסטים בודדים, עמודים וכו')
    ב. מהו סוג השינוי/מניפולציה אותן הוא רוצה.
    הוא יוכל לבחור מבין רשימת אפשרויות בתפריט (למשל: הוספת סוגריים תשנה לצבע X, ## יעשה שורת רווח וכו'), ובנוסף יוכל המשתמש להכניס קוד html עצמאית שאותו הוא ירצה להכניס במקום תגיות הקסם.

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

  • @מאור – למה עדיף לעבוד עם כמה שפחות פלאגינים? לא שמעתי את התאוריה הזו – מאיזו בחינה? ביצועים? נוחות?

    @חתול – אתה צודק, הייתי צריך לציין את זה. בהוספת is_page קטן או is_home() ואנחנו מסודרים.
    פורסם לאחרונה אצל ליאור שיאון.. ‫אלופי מדיה חברתית – ומתנגדיה‬ My ComLuv Profile

  • מאת שאול:

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

    בכל אופן לא מובן מעליו הסבר המקצועי – תודה מכל הלב.
    פורסם לאחרונה אצל שאול.. If you register your site for free at My ComLuv Profile

  • מאת יצחק:

    כן גם אני מצטרף לתודות.
    המשך בעבודה הטובה – באמת אתר טוב

  • @שאול, @יצחק – תודה על הפידבקים, אם תצטרכו עזרה ביישום אפשר לטקבק פה ולשאול.

    @ליאור – משתי הבחינות – לפעמים עם הזמן נוצרים מצבים של "מרוב תוספים לא רואים את היער", ואז אתה מגלה שיש לך רשימה ארוכה של עשרות תוספים, שאולי חלק מהם כבר לא ממש רלוונטיים. גם מבחינת הביצועים – כל תוסף זה עוד קוד ועוד קוד שרץ על האתר. בסופו של יום זה יכול להשפיע גם על הביצועים. בנוסף יש גם את עניין האבטחה, ולא כל התוספים הם בהכרח מאובטחים ברמה מספיק טובה וחלקם עלולים להוות גם חורי אבטחה. מן הסתם לא תבדוק קוד של כל תוסף ותוסף אם הוא בטיחותי מספיק או אם הוא כתוב בצורה אופטימלית, מה גם שלמשתמש הממוצע אין את הכלים לזה (ואני מודה, גם אני תחום ההמתמחות שלי הוא עדיין לא PHP ואין לי מספיק כלים לבדוק את זה). כך
    שלרוב, אם יש דברים שניתן לעשות גם ע"י שינוי בקוד של התבנית, לעתים אני אעדיף את זה מאשר שימוש בתוסף. שוב, הנחת העבודה היא שלא מתחלפת תבנית בכל שני וחמישי.
    סתם לדוגמה, נתקלתי פעם בתוסף שמשנה את שם המשתמש של admin לשם שאתה בוחר. זו למשל דוגמה מובהקת לתוסף מיותר: א. קל יותר להיכנס לדטהבייס ולשנות את המשתמש. ב. זה דבר שאתה עושה אותו אולי פעם אחת וזהו.

  • מאת מטייל:

    מאור,
    כנראה זה לא המקום המתאים לתגובה הזו, אבל בכל זאת…
    אפשר לקבל פרטים על כמה מהתוספים שאתה משתמש בהם כאן?
    1. קוד האימות בדף צור קשר. מתקפת ספאם מאלצת אותי לחפש אחרי תוסף טוב לתגובות..
    2. מערכת הדירוגים, נראה ממש טוב.
    3. הרשמה לתגובות.
    תודה ויום טוב !

  • @מטייל בבקשה..
    1. קוד האימות הוא really simple captcha .
    http://wordpress.org/extend/plugins/really-simple-captcha/
    עבור הטוקבקים לפוסטים – akismet שמגיע עם וורדפרס עושה בהחלט את העבודה כמו שצריך (מעל 40000 חסימות כבר). אני מאוד לא בעד קפצ'ה בטוקבקים, זה די מעצבן…

    2. הדירוגים – outbrain
    http://wordpress.org/extend/plugins/outbrain/

    3. הרשמה לתגובות –
    http://wordpress.org/extend/plugins/subscribe-to-comments/

  • מאת יצחק:

    שווה לבדוק את זה.

  • מאת יאיר:

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

פיד RSS לתגובות בפוסט | טראקבק


הוסף תגובה

You can add images to your comment by clicking here.

TechnoCraft - פתרונות אינטרנט


אֶקְסְפֶּרִימֶנְט דוֹט אֶפֶס - וורדפרס, תוכן, טכנולוגיה ועוד כמה דברים - מופעל באמצעות WordPress | פתרונות אינטרנט