在 WordPress 文章列表頁面中顯示自訂欄位,這可以讓在列表頁面中可以清除看到,所需要找的訊息,例如:自訂欄位想要顯示在列表中,或是在自訂文章類型,完全自訂在列表頁面所要顯示的欄位,這都是為了方便查找資料,那就不多說直接開始。

自製外掛起手式

*一句老話,程式碼要放在佈景主題的 function 裡,還是要放在外掛裡,來使用這功能都可,外掛起手式這裡不再詳述,去看WordPress custom post type 如何自訂文章類型這篇😃

列表中自訂顯示欄位

下面是最基本的程式碼框架,後面因應需求再逐步去修改😉

PHP
add_filter('manage_post_posts_columns', 'custom_posts_table_head');
function custom_posts_table_head($columns) {
    // 自訂要顯示的欄位,也可以使用 array 添加
    $columns['custom_column'] = '自訂欄位名稱';
  	//可以取消預設顯示欄位,如: title、date...等。
	unset( $columns['default'] );
  
    return $columns;
}
add_action('manage_post_posts_custom_column', 'custom_posts_table_content', 10, 2);
function custom_posts_table_content($column_name, $post_id) {
    // 在文章列表頁面中顯示自訂欄位的內容
    if ($column_name === 'custom_column') {
        $custom_value = get_post_meta($post_id, 'custom_column', true);
        echo $custom_value;
    }
}

文章列表中顯示基本相關欄位

因需求會希望在文章列表顯示一些欄位,下面會列出一些可以自訂顯示出來的欄位。

  • post_id:文章ID。
  • post_title:文章標題。
  • post_author:文章作者。
  • post_category:文章所屬的分類。
  • post_tag:文章所標記的標籤。
  • post_status:文章的狀態,例如發布、草稿等等。
  • post_date:文章的發佈日期。
  • post_modified:文章的最後修改日期。
  • post_excerpt:文章的摘要內容。
  • post_content:文章的內容。
  • featured_image:文章中顯示的特色圖片。

將上面的欄位顯示在文章列表中,是使用 array 的方式添加,使用 switch 載入欄位的內容,注意上面的欄位名稱為資料庫欄位名稱,與程式碼的欄位名稱會有點不一樣😏下面是程式碼:

PHP
add_filter('manage_post_posts_columns', 'custom_posts_table_head');
function custom_posts_table_head($columns) {
    // 自訂要顯示的欄位,也可以使用 array 添加
    $columns = array(
        'cb' => '<input type="checkbox" />',
        'id' => 'ID',
        'featured_image' => '特色圖片',
        'title' => '標題',
        'excerpt' => '摘要',
        'author' => '作者',
        'categories' => '分類',
        'tags' => '標籤',
        'date' => '日期',
        'modified' => '修改日期',
        'status' => '文章狀態'
    );
    return $columns;
}
add_action('manage_post_posts_custom_column', 'custom_posts_table_content', 10, 2);
function custom_posts_table_content($column_name, $post_id) {
    // 在文章列表頁面中顯示自訂欄位的內容
    switch ($column_name) {
        case 'id':
            echo $post_id;
            break;
        case 'featured_image':
            echo get_the_post_thumbnail($post_id, array(50, 50));
            break;
        case 'excerpt':
            $excerpt = get_the_excerpt($post_id);
            echo $excerpt;
            break;
        case 'categories':
            $categories = get_the_category($post_id);
            if (!empty($categories)) {
                foreach ($categories as $category) {
                    echo '<a href="' . esc_url(get_category_link($category->term_id)) . '">' . esc_html($category->name) . '</a>, ';
                }
            }
            break;
        case 'tags':
            $tags = get_the_tags($post_id);
            if (!empty($tags)) {
                foreach ($tags as $tag) {
                    echo '<a href="' . esc_url(get_tag_link($tag->term_id)) . '">' . esc_html($tag->name) . '</a>, ';
                }
            }
            break;
        case 'modified':
            echo get_the_modified_date('Y-m-d H:i:s', $post_id);
            break;
        case 'status':
            $post_status = get_post_status($post_id);
            echo $post_status;
            break;
    }
}

會發現標題與作者和日期,三個欄位不需要設定載入內容,欄位就可以正常顯示內容,上面程式碼就可以看到文章列表欄位排序與內容。

補充說明:如果要取得_posts資料表上,上述以外的欄位內容,需要是用 get_post() ,例如要取得 guid 欄位,載入內容為 array 所以這樣寫 get_post($post_id->guid); 這樣,就可以取得欄位的內容。

文章列表中顯示自訂欄位內容

再來我取消一些欄位,來把自訂欄位的內容加到文章列表中顯示,不然擺不下去了!接續前幾篇教學,把 ISBN 欄位顯示到列表上,在這裡的自訂欄位名稱就是在metakey的欄位名稱,我的欄位名稱為小寫的isbn,程式碼如下:

PHP
add_filter('manage_post_posts_columns', 'custom_posts_table_head');
function custom_posts_table_head($columns) {
    // 自訂要顯示的欄位,也可以使用 array 添加
    $columns = array(
        'cb' => '<input type="checkbox" />',
        'id' => 'ID',
        'featured_image' => '特色圖片',
        'title' => '標題',
        'author' => '作者',
        'categories' => '分類',
        'tags' => '標籤',
        'date' => '日期',
        'isbn' => 'ISBN'
    );
    return $columns;
}
add_action('manage_post_posts_custom_column', 'custom_posts_table_content', 10, 2);
function custom_posts_table_content($column_name, $post_id) {
    // 在文章列表頁面中顯示自訂欄位的內容
    switch ($column_name) {
        case 'id':
            echo $post_id;
            break;
        case 'featured_image':
            echo get_the_post_thumbnail($post_id, array(50, 50));
            break;
        case 'categories':
            $categories = get_the_category($post_id);
            if (!empty($categories)) {
                foreach ($categories as $category) {
                    echo '<a href="' . esc_url(get_category_link($category->term_id)) . '">' . esc_html($category->name) . '</a>, ';
                }
            }
            break;
        case 'tags':
            $tags = get_the_tags($post_id);
            if (!empty($tags)) {
                foreach ($tags as $tag) {
                    echo '<a href="' . esc_url(get_tag_link($tag->term_id)) . '">' . esc_html($tag->name) . '</a>, ';
                }
            }
            break;
        case 'isbn':
            $isbn = get_post_meta($post_id, 'isbn', true);
            echo $isbn;
            break;
    }
}

自訂列表欄位的另一種寫法,程式碼如下:

PHP
add_filter('manage_post_posts_columns', 'custom_posts_table_head');
function custom_posts_table_head($columns) {
    // 自訂要顯示的欄位,必須使用 unset 刪除預設的欄位,才能自訂欄位排序
    unset( $columns['comments'] );
    unset( $columns['title'] );
    unset( $columns['author'] );
    unset( $columns['categories'] );
    unset( $columns['tags'] );
    unset( $columns['date'] );
    //自訂列表欄位排序
    $columns['featured_image'] = '特色圖片';
    $columns['title'] = '標題';
    $columns['excerpt'] = '摘要';
    $columns['author'] = '作者';
    $columns['categories'] = '分類';
    $columns['tags'] = '標籤';
    $columns['date'] = '日期';
    $columns['modified'] = '修改日期';
    $columns['status'] = '文章狀態';
  
    return $columns;
}
////////////////////////一下就依樣沒有變,就不重複//////////////////

自訂文章類型列表中顯示自訂欄位

要將功能使用在自訂文章類型(custom_post_type),很簡單只要把掛勾指向文章類型名稱就好,接續上幾篇教學,把 books 自訂文章類型添加到掛勾中如下:

PHP
//自訂欄位掛勾
add_filter('manage_post_posts_columns', 'custom_posts_table_head');
//改為
add_filter('manage_books_posts_columns', 'custom_posts_table_head');
//載入內容掛勾
add_action('manage_post_posts_custom_column', 'custom_posts_table_content', 10, 2);
//改為
add_action('manage_books_posts_custom_column', 'custom_posts_table_content', 10, 2);

補充說明:如果要自訂文章列表顯示欄位,影響到自訂文章類型的列表欄位的話,掛勾就把 post 拿掉,如下方程式碼會與全域的方式添加顯示欄位到文章與文章類型:

PHP
add_filter('manage_posts_columns', 'custom_posts_table_head');
add_action('manage_posts_custom_column', 'custom_posts_table_content', 10, 2);

完整的的程式碼入如下:

PHP
add_filter('manage_books_posts_columns', 'custom_posts_table_head');
function custom_posts_table_head($columns) {
    // 自訂要顯示的欄位,也可以使用 array 添加
    $columns = array(
        'cb' => '<input type="checkbox" />',
        'id' => 'ID',
        'featured_image' => '特色圖片',
        'title' => '標題',
        'author' => '作者',
        'categories' => '分類',
        'tags' => '標籤',
        'date' => '日期',
        'isbn' => 'ISBN'
    );
    return $columns;
}
add_action('manage_books_posts_custom_column', 'custom_posts_table_content', 10, 2);
function custom_posts_table_content($column_name, $post_id) {
    // 在文章列表頁面中顯示自訂欄位的內容
    switch ($column_name) {
        case 'id':
            echo $post_id;
            break;
        case 'featured_image':
            echo get_the_post_thumbnail($post_id, array(50, 50));
            break;
        case 'categories':
            $categories = get_the_category($post_id);
            if (!empty($categories)) {
                foreach ($categories as $category) {
                    echo '<a href="' . esc_url(get_category_link($category->term_id)) . '">' . esc_html($category->name) . '</a>, ';
                }
            }
            break;
        case 'tags':
            $tags = get_the_tags($post_id);
            if (!empty($tags)) {
                foreach ($tags as $tag) {
                    echo '<a href="' . esc_url(get_tag_link($tag->term_id)) . '">' . esc_html($tag->name) . '</a>, ';
                }
            }
            break;
        case 'isbn':
            $isbn = get_post_meta($post_id, 'isbn', true);
            echo $isbn;
            break;
    }
}

自訂文章類型列表中顯示自訂資料表欄位內容

待續…(等我寫出自訂欄位資料寫入自訂資料表教學)

上述的範例應夠簡單好理解了吧!再來還有就是顯示自訂資料表,就等等😌希望上面的範例對你有幫助,那就這樣啦!掰~!

最後修改日期: 2024 年 4 月 12 日

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。