WordPress作為內容管理系統(CMS)在前台依靠佈景主題產生各種內容頁面的HTML結構,在後台頁面則有自己管理的HTML結構
各種內容的列表頁的表格即是,無論是商品、文章、頁面、作品等等,只要向WordPress註冊了一個文章類型(Post type),WordPress就會自動幫你產生一個相關的列表管理頁,讓你可管理自訂文章類型的內容,而不用再自己寫管理頁面。
例如WooCommerce提供的shop_order(訂單)這個文章類型的列表頁
之後再來細談列表頁的產生機制,和如何產生自訂內容的列表頁(使用WP_List_Table
)
有時候要在列表頁進行一些快速操作或是顯示一些資訊,而不用再點進去編輯頁面看,就會需要在列表頁加上自訂欄位
如本站開發的”WooCommerce 綠界科技B2C電子發票模組專業版“這個外掛,需要在訂單列表內加入一個電子發票欄位,以便進行快速操作
以下示範如何在WooCommerce的商品列表內加入自訂欄位,並顯示商品的重量資訊
1. 加入自訂欄位
使用的filter hook為manage_{$post_type}_posts_columns
,$post_type為文章類型,可在某個特定的文章類型列表中加入一個自訂欄位
如果要在所有文章類型的列表中加入,使用manage_posts_columns
<?php // 商品的post type為product add_filter('manage_product_posts_columns', 'octopuswp_add_product_weight_column'); /** * 加入重量欄位 * @param array $columns 欄位資訊 * @return array */ function octopuswp_add_product_weight_column($columns) { // $columns會傳入所有欄位的資訊,只需要新增進去即可 // product_weight為自訂的key $columns['product_weight'] = '重量'; return $columns; } ?>
2. 加入自訂欄位的資料
加入欄位之後,再來就是要把欄位資料放上去,使用manage_{$post_type}_posts_custom_column
這個action hook
如果不指定文章類型,則使用manage_posts_custom_column
<?php // 商品的post type為product add_action('manage_product_posts_custom_column', 'octopuswp_print_product_weight_to_column', 10, 2); /** * 加入重量欄位的資料 * @param string $column_name 欄位名稱 * @param int $post_id 文章ID */ function octopuswp_print_product_weight_to_column($column_name, $post_id) { // WordPress在對於表格的每一行與每個欄位都會呼叫一次這個action hook,並將當下的欄位名稱及文章ID傳入 // 所以要判斷當下的欄位是不是剛剛新增的,如果是的話,再顯示資料 // product_weight為剛剛新增的欄位key if('product_weight' == $column_name) { $product = wc_get_product($post_id); echo $product->get_weight(); } } ?>