חיפוש ]

הצגת מזהה (ID) של עמודים ופוסטים בלוח הבקרה של וורדפרס

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

למרבה הצער, וורדפרס אינה מציגה כברירת מחדל את אותם מזהים (ID's) בלוח הבקרה.

ישנה דרך לגלות מזהים אלו על ידי ביקור בדף העריכה של אותו עמוד/פוסט ולבדוק את ה-URL שלו. הוא ייראה משהו בסגנון הבא:

https://savvy.co.il/wp-admin/post.php?post=XXXX&action=edit

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

הצגת מזהה הפוסט באמצעות קוד

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

לפני הוספת קוד מותאם, ודאו שאתם משתמשים בתבנית בת (Child Theme) או בתוסף MU-Plugin. לעולם אל תערכו ישירות את קובץ ה-functions.php של תבנית האב – השינויים יימחקו בעדכון הבא של התבנית.

הוספת עמודות ללוח הבקרה של WordPress

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

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

add_filter( 'manage_posts_columns', 'sv_add_id_column', 5 );
add_action( 'manage_posts_custom_column', 'sv_id_column_content', 5, 2 );

function sv_add_id_column( $columns ) {
    $columns['sv_id'] = 'ID';
    return $columns;
}

function sv_id_column_content( $column, $id ) {
    if ( 'sv_id' == $column ) {
        echo $id;
    }
}

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

שימו לב שהפונקציה sv_id_column_content מקבלת שני פרמטרים: שם העמודה והמזהה (ID) של הפוסט המוצג. מה שנשאר הוא פשוט להדפיס מזהה זה בעמודה שיצרתם. הנה תמונה של התוצאה כפי שנראית בלוח הבקרה של WordPress:

הצגת מזהה פוסט - לוח הבקרה של וורדפרס

מציאת ההוקים הנכונים

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

הוקים אלו נקראים "הוקים משתנים" (variable hooks) מכיוון שהם שייכים למשפחת הוקים ששמותיהם עוקבים אחר תבנית קבועה. החליפו את [post_type_or_element] בסוג התוכן הרלוונטי:

  • manage_[post_type_or_element]_columns
  • manage_[post_type_or_element]_custom_column

לדוגמה, כדי לטרגט עמודים תשתמשו ב-manage_pages_columns וב-manage_pages_custom_column.

על בסיס תבנית זו ניתן לעבוד עם פוסטים, עמודים וסוגי תוכן מותאמים (Custom Post Types). כדי להציג את עמודת המזהה עבור פוסטים, עמודים, תגובות, מדיה ואפילו עבור משתמשים (users) יש להשתמש בקוד הבא:

function sv_add_id_column( $columns ) {
    $checkbox = array_slice( $columns, 0, 1 );
    $columns  = array_slice( $columns, 1 );

    $id['sv_id'] = 'ID';

    $columns = array_merge( $checkbox, $id, $columns );
    return $columns;
}

function sv_id_column_content( $column, $id ) {
    if ( 'sv_id' == $column ) {
        echo $id;
    }
}

// posts & post types
add_filter( 'manage_posts_columns', 'sv_add_id_column', 5 );
add_action( 'manage_posts_custom_column', 'sv_id_column_content', 5, 2 );

// pages
add_filter( 'manage_pages_columns', 'sv_add_id_column', 5 );
add_action( 'manage_pages_custom_column', 'sv_id_column_content', 5, 2 );

// users
add_action( 'manage_users_columns', 'sv_add_id_column', 5 );
add_filter( 'manage_users_custom_column', 'sv_id_column_content', 5, 2 );

// media
add_filter( 'manage_media_columns', 'sv_add_id_column', 5 );
add_action( 'manage_media_custom_column', 'sv_id_column_content', 5, 2 );

// comments
add_action( 'manage_edit-comments_columns', 'sv_add_id_column', 5 );
add_action( 'manage_comments_custom_column', 'sv_id_column_content', 5, 2 );

כדי להוסיף את עמודת המזהה עבור כל סוגי הטקסונומיות – קטגוריות, תגיות וכו' – השתמשו בלולאת foreach:

// all taxonomies
function sv_id_taxonomy_columns( $columns ) {
    $columns['my_term_id'] = 'ID';
    return $columns;
}

function sv_id_taxonomy_columns_content( $content, $column_name, $term_id ) {
    if ( 'my_term_id' == $column_name ) {
        $content = $term_id;
    }
    return $content;
}

$taxonomies = get_taxonomies();
foreach ( $taxonomies as $taxonomy ) {
    add_action( 'manage_edit-' . $taxonomy . '_columns', 'sv_id_taxonomy_columns' );
    add_filter( 'manage_' . $taxonomy . '_custom_column', 'sv_id_taxonomy_columns_content', 10, 3 );
}

הצגת המזהה בעמודה השנייה

כרגע עמודת המזהה מופיעה בעמודה האחרונה. אך מה אם רוצים להציג את המזהה מיד אחרי עמודת תיבת הסימון (checkbox) לטובת הנוחות?

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

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

מבט בקוד אמור להבהיר את הפעולה בצורה טובה יותר, והתוצאה בתמונה מטה:

add_filter( 'manage_posts_columns', 'sv_add_id_column', 5 );
add_action( 'manage_posts_custom_column', 'sv_id_column_content', 5, 2 );

function sv_add_id_column( $columns ) {
    $checkbox = array_slice( $columns, 0, 1 );
    $columns  = array_slice( $columns, 1 );

    $new['sv_id'] = 'ID';

    $columns = array_merge( $checkbox, $new, $columns );

    return $columns;
}
הצגת המזהה בעמודה השנייה - לוח הבקרה של וורדפרס

שאלות נפוצות

שאלות נפוצות בנושא הצגת מזהי פוסטים בלוח הבקרה של WordPress:

איך אפשר למצוא את ה-ID של פוסט או עמוד ב-WordPress בלי קוד?
אפשר למצוא את המזהה על ידי פתיחת מסך העריכה של הפוסט או העמוד ובדיקת ה-URL בדפדפן. המספר שמופיע אחרי post= הוא המזהה. לדוגמה, post.php?post=42&action=edit אומר שהמזהה הוא 42.
האם הקוד עובד גם עם סוגי תוכן מותאמים (Custom Post Types)?
כן. ההוקים manage_posts_columns ו-manage_posts_custom_column חלים על כל סוגי התוכן הציבוריים. עבור סוגי תוכן מותאמים עם הגדרות ספציפיות, ניתן להשתמש בהוקים ממוקדים כמו manage_{post_type}_posts_columns.
היכן כדאי להוסיף את הקוד - ב-functions.php או בתוסף?
ניתן להוסיף את הקוד לקובץ functions.php של תבנית הבת, או עדיף - לתוסף MU-Plugin ייעודי. היתרון של MU-Plugin הוא שהוא נשאר פעיל ללא קשר לתבנית שבה אתם משתמשים.
אפשר להציג מידע אחר בעמודה מותאמת מלבד ה-ID?
בהחלט. על ידי שינוי פונקציית ה-callback, ניתן להציג כל מידע של הפוסט - כמו ספירת מילים, אימייל המחבר, פורמט הפוסט, ערכי שדות מותאמים, ואפילו תמונה מוקטנת של התמונה הראשית.
האם הוספת עמודת ID משפיעה על ביצועי האתר?
לא. עמודת המזהה משפיעה רק על לוח הבקרה ומוסיפה עומס זניח. היא לא משפיעה על החלק הציבורי (front-end) של האתר בשום צורה.

סיכום

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

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

דיון ותגובות
8 תגובות  ]
  • יוחאי ירמיהו 9 יוני 2019, 10:40

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

    בניגוד לתוסף Reveal IDs לפני כמה חודשים פיתחתי ושיחררתי תוסף לוורדפרס שמאפשר להציג את ה-id כמעט בכל האזורים של וורדפרס וגם בבאר העליון. לי באופן אישי זה חוסך הרבה זמן ואני ממליץ לך לנסות.
    https://wordpress.org/plugins/show-posts-and-pages-id/

  • מירי רובינשטיין 18 נובמבר 2019, 11:10

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

    • רועי יוסף 18 נובמבר 2019, 11:14

      היי מירי,

      זו בדיוק הסיבה שיש לבצע מה שכתוב בפוסט זה. כך לפחות ה ID יופיע ליד שמות הפוסטים ותוכלי לחפש באמצעות חיפוש פשוט ברמת הדפדפן על יד CTRL-F או CMD-F במקלדת..

  • רוי 24 יולי 2022, 13:22

    איך אני מגדירה id לתמונה מסוימת בכדי לשנות רק אותה?

    • רועי יוסף 24 יולי 2022, 23:51

      היי,

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

      • רוי 25 יולי 2022, 19:49

        אם אני רוצה לעצב מתוך מאגר תמונות רק תמונה מסוימת איך אני מגיעה אליה..ללא הגדרת id

        • רועי יוסף 25 יולי 2022, 19:58

          את משתמשת בחיפוש תחת "מדיה" ומנסה למצוא אותה על פי התיאור שנתת לה או לפי שם קובץ התמונה. את שם הקובץ את יכולה למצוא באמצעות Inspect Element על התמונה (Developer Tools).

השאירו תגובה

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

Savvy WordPress Development official logo