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

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

3 בפברואר 2011 | מאת רמי | 6 תגובות | תגיות: , ,

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

הבעיה

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

הקוד

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

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

// Add Columns to Post SubPannel
function bdihot_post_subpannel_columns( $columns ) {

    $icon = array( 'icon' => 'אייקון' );
    $columns = array_merge(
        array_slice( $columns, 0, -6 ), // before
        $icon,                          // inserted
        array_slice( $columns, -6 )     // after
    );

    $channel = array( 'channel' => 'ערוצים' );
    $columns = array_merge(
        array_slice( $columns, 0, -4 ), // before
        $channel,                       // inserted
        array_slice( $columns, -4 )     // after
    );

    return $columns;

}
add_filter( 'manage_posts_columns', 'bdihot_post_subpannel_columns' );


// Add Columns Values to Post SubPannel
function bdihot_post_subpannel_columns_values( $columns, $post_id ) {
    if ( $columns == 'icon' ) {
        $icon = get_post_meta( $post_id, 'icon', true );
        echo '<img src="http://www.bdihot.co.il/small_icons/' . $icon . '" width="30" height="30" />';
    } elseif ( $columns == 'channel' ) {
        $channel = get_the_term_list( $post->ID, 'channel', '', ', ', '' );
        echo $channel;
    }
}
add_action( 'manage_posts_custom_column', 'bdihot_post_subpannel_columns_values', 10, 2 );
  • בעזרת הפילטר manage_posts_columns אנחנו מוסיפים כותרות נוספות לטבלה, במקרה שלנו הוספנו שתי כותרות – אייקון וערוצים. הכותרות מוגדרות ב- $columns , שימוש בפונקציות array_merge ו- array_slice מאפשר לי לקבוע היכן בדיוק תיכנס הכותרת.
  • בעזרת האקשן manage_posts_custom_column אנחנו מוסיפים תוכן לטבלה, במקרה שלנו הוספנו את התמונה של האייקון (בעזרת הפונקציה get_post_meta) ואת הטקסונומיה שם הערוץ (בעזרת הפונקציה get_the_term_list).

התוצאה

להלן צילום מסך של התוצר הסופי:

טבלת פוסים מורחבת הכוללת את אלמנטים

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

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

סיכום

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

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

מאת רמי

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

6 תגובות »

  • ניר כותב :

    פוסט נהדר. תודה רבה!
    יישמתי את הכתוב באתר של לקוח ויש לי שאלה:
    הגדרתי באתר custom post type בשם products והגדרתי עבורו טקסונומיה אחת.
    כעת יש לי במערכת 2 פאנלים עבור פוסטים: פוסטים ו- products.

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

    השאלה שלי, כיצד אני יכול להרחיב רק את טבלת הפוסטים מסוג "products"?

    תודה רבה,

  • רמי כותב :

    ניר,
    יש לשנות את הפילטר manage_posts_columns לפילטר בשם manage_{post_type}_posts_column, במקום {post_type} תציב כל סוג תוכן שתרצה (במקרה שלך products) והשינוי יחול רק על סוגי התוכן שבחרת ולא על כלל סוגי הפוסטים.

  • אסף כותב :

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

  • דובי כותב :

    צריך להשתמש בתגית more זה חותך את הפוסטים.

  • יובל כץ כותב :

    תודה רבה רמי,

    בכלל לא הצלחתי למצו מידע על זה באנגלית והייתי ממש צריך את זה לאיזה אתר

  • Camus Igal Bouhnik כותב :

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

הוסף תגובה !

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

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