翻譯自: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 的字段。
有了具體的輸出內容自會後,後台文章列表就不是空的了