翻譯自:http://wp.smashingmagazine.com/2013/12/05/modifying-admin-post-lists-in-WordPress/

你是否發現,當你新建一個自定義文章類型後,在後台的文章管理列表,僅僅只顯示文章標題和日期?但事實上文章還包含很多信息,比如作者、分類、評論等,本片文章就叫你如何修改後台的文章列表的信息。

首先請確定你知道本文要將什麼,後台文章管理列表指的是你再後台點擊 「所有文章」「所有頁面」 之後出現的文章的列表表格。

創建一個自定義的文章類型 (,我將使用 wp3.8.1 twentyfourteen 主題測試),在主題的 functions.php 文件插入以下的代碼,關於如何創建一個文章類型,你也可以參考本站教程 WordPress 進階教程 (二): 註冊一個自定義的文章類型:

  1. add_action( 'init', 'bs_post_types' );   
  2. function bs_post_types() {   
  3.   
  4.     $labels = array(   
  5.         'name'                => __( 'Events', THEMENAME ),   
  6.         'singular_name'       => __( 'Event', THEMENAME ),   
  7.         'add_new'             => __( 'Add New', THEMENAME ),   
  8.         'add_new_item'        => __( 'Add New Event', THEMENAME ),   
  9.         'edit_item'           => __( 'Edit Event', THEMENAME ),   
  10.         'new_item'            => __( 'New Event', THEMENAME ),   
  11.         'all_items'           => __( 'All Event', THEMENAME ),   
  12.         'view_item'           => __( 'View Event', THEMENAME ),   
  13.         'search_items'        => __( 'Search Events', THEMENAME ),   
  14.         'not_found'           => __( 'No events found', THEMENAME ),   
  15.         'not_found_in_trash'  => __( 'No events found in Trash', THEMENAME ),   
  16.         'menu_name'           => __( 'Events', THEMENAME ),   
  17.     );   
  18.   
  19.     $supports = array( 'title', 'editor' );   
  20.   
  21.     $slug = get_theme_mod( 'event_permalink' );   
  22.     $slug = ( empty$slug ) ) ? 'event' : $slug;   
  23.   
  24.     $args = array(   
  25.         'labels'              => $labels,   
  26.         'public'              => true,   
  27.         'publicly_queryable'  => true,   
  28.         'show_ui'             => true,   
  29.         'show_in_menu'        => true,   
  30.         'query_var'           => true,   
  31.         'rewrite'             => array( 'slug' => $slug ),   
  32.         'capability_type'     => 'post',   
  33.         'has_archive'         => true,   
  34.         'hierarchical'        => false,   
  35.         'menu_position'       => null,   
  36.         'supports'            => $supports,   
  37.     );   
  38.   
  39.     register_post_type( 'event', $args );   
  40.   
  41. }  

添加代碼之後,在後台發佈一些文章,文章管理列表將如圖:

給表格頭部添加列

  1. add_filter('manage_event_posts_columns', 'bs_event_table_head');   
  2. function bs_event_table_head( $defaults ) {   
  3.     $defaults['event_date']  = 'Event Date';   
  4.     $defaults['ticket_status']    = 'Ticket Status';   
  5.     $defaults['venue']   = 'Venue';   
  6.     $defaults['author'] = 'Added By';   
  7.     return $defaults;   
  8. }  

注意:上面代碼中我們使用了過濾器 manage_event_posts_columns,其中的 event 為上面創建的文章類型名。

如果你僅僅添加了上面的代碼,你會發現,在後台的文章管理列表,僅僅是表格的頭部出現了列的名稱,但是沒有具體的內容顯示。

給列添加具體的顯示內容

添加以下代碼到 functions.php 中。

  1. add_action( 'manage_event_posts_custom_column', 'bs_event_table_content', 10, 2 );   
  2.   
  3. function bs_event_table_content( $column_name$post_id ) {   
  4.     if ($column_name == 'event_date') {   
  5.         $event_date = get_post_meta( $post_id, '_bs_meta_event_date', true );   
  6.             echo  date( _x( 'F d, Y', 'Event date format', 'textdomain' ), strtotime$event_date ) );   
  7.     }   
  8.     if ($column_name == 'ticket_status') {   
  9.         $status = get_post_meta( $post_id, '_bs_meta_event_ticket_status', true );   
  10.         echo $status;   
  11.     }   
  12.   
  13.     if ($column_name == 'venue') {   
  14.         echo get_post_meta( $post_id, '_bs_meta_event_venue', true );   
  15.     }   
  16.   
  17. }  

上面的代碼中為新增加的幾個列輸出內容。
其中 events 的日期,是獲取一個名為_bs_meta_event_date 的字段
ticket status 是獲取_bs_meta_event_ticket_status 的字段
venue 是獲取_bs_meta_event_venue 的字段。

有了具體的輸出內容自會後,後台文章列表就不是空的了