דף הבית » טריקים וטיפים, מומלצים

הכנס בנר בין שני פוסטים

10 בדצמבר 2010 | מאת רמי | 11 תגובות | תגיות: , ,

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

הלולאה של וורדפרס

בעמוד הראשי ובעמודי הארכיון של וורדפרס, המערכת משתמשת בלולאה המפורסמת של וורדפרס (The WordPress Loop) על מנת להציג פוסטים.

// The WordPress Loop
if (have_posts()) :
   while (have_posts()) :
      the_post();
      the_content();
   endwhile;
endif;

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

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

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

function insert_between_posts( $post ) {
    global $wp_query;
 
    // Check if we are in the right template
    if ( !is_home() ) return;

    // Check if we are in the main loop
    if ( $wp_query->post != $post ) return;
 
    // Check if we are at the right position
    if ( $wp_query->current_post != 1 ) return;
 
    // Display the banner
    echo '<div>Some banner</div>';
}
add_action('the_post', 'insert_between_posts');

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

התאמות לקוד

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

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

מאת רמי

אחראי על אתר וורדפרס בעברית ועל תרגום ושחרור גרסאות וורדפרס בעברית. מפתח ליבה, בכל גרסה החל מגרסה 2.8, מפתח מוביל בגרסה 4.4 ובגרסה 4.6. מספק שירותי פיתוח אתרים, פיתוח תוספי וורדפרס לסטרטאפים ופיתוח כלים למפתחי וורדפרס - GenerateWP.com.

11 תגובות »

  • מאור כותב :

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

  • רמי כותב :

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

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

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

    חוץ מזה, תראה איזה קוד יפה ואלגנטי זה.

  • מאור כותב :

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

  • מועדון דיזנגוף כותב :

    אז לא הבנתי , ידרוס או לא ?

  • רמי כותב :

    כן, ידרוס.
    אבל ידרוס רק קובץ אחד (functions.php) ולא את כל קבצי התבנית ששינית. קל יותר לשחזר קובץ אחד מאשר את כל קבצי התבנית ששונו.

  • מאור כותב :

    ניתן להשתמש בקובץ פונקציות מותאם אישית, מופרד מה functions.php של התבנית.
    לפני עדכון גרסה יש לשמור את הקובץ המותאם בצד ואחרי העדכון להחזיר אותו לתיקייה ולבצע מחדש את ההפנייה אליו.
    יש הסבר קצר כאן בפוסט שכתבתי על זה לפני כשנה, עדיין ישים –
    http://www.maorb.info/wordpress/2009-12/custom-functions-file

  • רמי כותב :

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

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

  • מאור כותב :

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

  • יובל כותב :

    תודה, השתמשתי בזה באתר שלי וזה עובד כמו קסם 🙂

    מה קורה אם אני רוצה להכניס 2 או 3 באנרים במקומות שונים?

    לשכפל את קטע הקוד הנ"ל וכל פעם לשנות את הערך של current_post?

  • רמי כותב :

    יובל, ההיגיון אומר שבתנאי של current_post נגדיר "אחרי פוסט 1" או "אחרי פוסט 5".

  • HJGEC כותב :

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

הוסף תגובה !

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

תגיות HTML מורשות לשימוש:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>