加入自訂欄位至WordPress後台列表頁

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();
    }
}
?>


此篇文章版權屬於OctopusWP

轉載請註明出處 @OctopusWP (https://www.octopuswp.com)

發佈留言

×

Cart