翻譯自:http://wp.smashingmagazine.com/2013/12/05/modifying-admin-post-lists-in-WordPress/
你是否發現,當你新建一個自定義文章型別後,在後臺的文章管理列表,僅僅只顯示文章標題和日期?但事實上文章還包含很多資訊,比如作者、分類、評論等,本片文章就叫你如何修改後臺的文章列表的資訊。
首先請確定你知道本文要將什麼,後臺文章管理列表指的是你再後臺點選 「所有文章」「所有頁面」 之後出現的文章的列表表格。
建立一個自定義的文章型別 (,我將使用 wp3.8.1 twentyfourteen 主題測試),在主題的 functions.php 檔案插入以下的程式碼,關於如何建立一個文章型別,你也可以參考本站教程 WordPress 進階教程 (二): 註冊一個自定義的文章型別:
- add_action( 'init', 'bs_post_types' );
- function bs_post_types() {
- $labels = array(
- 'name' => __( 'Events', THEMENAME ),
- 'singular_name' => __( 'Event', THEMENAME ),
- 'add_new' => __( 'Add New', THEMENAME ),
- 'add_new_item' => __( 'Add New Event', THEMENAME ),
- 'edit_item' => __( 'Edit Event', THEMENAME ),
- 'new_item' => __( 'New Event', THEMENAME ),
- 'all_items' => __( 'All Event', THEMENAME ),
- 'view_item' => __( 'View Event', THEMENAME ),
- 'search_items' => __( 'Search Events', THEMENAME ),
- 'not_found' => __( 'No events found', THEMENAME ),
- 'not_found_in_trash' => __( 'No events found in Trash', THEMENAME ),
- 'menu_name' => __( 'Events', THEMENAME ),
- );
- $supports = array( 'title', 'editor' );
- $slug = get_theme_mod( 'event_permalink' );
- $slug = ( empty( $slug ) ) ? 'event' : $slug;
- $args = array(
- 'labels' => $labels,
- 'public' => true,
- 'publicly_queryable' => true,
- 'show_ui' => true,
- 'show_in_menu' => true,
- 'query_var' => true,
- 'rewrite' => array( 'slug' => $slug ),
- 'capability_type' => 'post',
- 'has_archive' => true,
- 'hierarchical' => false,
- 'menu_position' => null,
- 'supports' => $supports,
- );
- register_post_type( 'event', $args );
- }
新增程式碼之後,在後臺釋出一些文章,文章管理列表將如圖:

給表格頭部新增列
- add_filter('manage_event_posts_columns', 'bs_event_table_head');
- function bs_event_table_head( $defaults ) {
- $defaults['event_date'] = 'Event Date';
- $defaults['ticket_status'] = 'Ticket Status';
- $defaults['venue'] = 'Venue';
- $defaults['author'] = 'Added By';
- return $defaults;
- }
注意:上面程式碼中我們使用了過濾器 manage_event_posts_columns,其中的 event 為上面建立的文章型別名。
如果你僅僅新增了上面的程式碼,你會發現,在後臺的文章管理列表,僅僅是表格的頭部出現了列的名稱,但是沒有具體的內容顯示。
給列新增具體的顯示內容
新增以下程式碼到 functions.php 中。
- add_action( 'manage_event_posts_custom_column', 'bs_event_table_content', 10, 2 );
- function bs_event_table_content( $column_name, $post_id ) {
- if ($column_name == 'event_date') {
- $event_date = get_post_meta( $post_id, '_bs_meta_event_date', true );
- echo date( _x( 'F d, Y', 'Event date format', 'textdomain' ), strtotime( $event_date ) );
- }
- if ($column_name == 'ticket_status') {
- $status = get_post_meta( $post_id, '_bs_meta_event_ticket_status', true );
- echo $status;
- }
- if ($column_name == 'venue') {
- echo get_post_meta( $post_id, '_bs_meta_event_venue', true );
- }
- }
上面的程式碼中為新增加的幾個列輸出內容。
其中 events 的日期,是獲取一個名為_bs_meta_event_date 的欄位
ticket status 是獲取_bs_meta_event_ticket_status 的欄位
venue 是獲取_bs_meta_event_venue 的欄位。
有了具體的輸出內容自會後,後臺文章列表就不是空的了
