
WordPress 後台的「文章 → 全部文章」預設依發佈日期排序,最新發佈的在最上面。
網站經營久了,常常是回頭修改舊文章:更新價格、補上新資訊、修正錯字。這些改過的舊文章還是排在很後面,想找「最近改了哪幾篇」只能一頁一頁翻。好幾個人一起管網站時,也看不出是誰改的。
這段程式碼做三件事:
- 文章列表預設改成依最後更新時間排序,剛改過的排最上面。
- 多一欄「最後更新」,顯示更新時間和最後修改的人。
- 這一欄可以點標題排序;點「內容標題」「日期」等其他欄位,照你點的排。
程式碼
放在子佈景主題的 functions.php,或用 Code Snippets 這類外掛新增:
PHP
// 後台「文章」列表:預設依最後更新時間排序(自己點了其他欄位排序時,照點的排)
add_action( 'pre_get_posts', function ( $query ) {
if ( ! is_admin() || ! $query->is_main_query() || ! function_exists( 'get_current_screen' ) ) {
return;
}
$screen = get_current_screen();
if ( $screen && 'edit-post' === $screen->id && ! $query->get( 'orderby' ) ) {
$query->set( 'orderby', 'modified' );
$query->set( 'order', 'DESC' );
}
} );
// 多一欄「最後更新」:時間和最後修改的人
add_filter( 'manage_post_posts_columns', function ( $columns ) {
$columns['zw_modified'] = '最後更新';
return $columns;
} );
add_action( 'manage_post_posts_custom_column', function ( $column, $post_id ) {
if ( 'zw_modified' !== $column ) {
return;
}
echo esc_html( get_the_modified_date( 'Y/m/d H:i', $post_id ) );
$who = get_the_modified_author( $post_id );
if ( $who ) {
echo '<br><small>' . esc_html( $who ) . '</small>';
}
}, 10, 2 );
// 「最後更新」可以點標題排序,並標示目前是依它排序
add_filter( 'manage_edit-post_sortable_columns', function ( $columns ) {
$columns['date'] = array( 'date', true, __( 'Date' ), __( 'Table ordered by Date.' ) );
$columns['zw_modified'] = array( 'modified', true, '最後更新', '依最後更新時間排序。', 'desc' );
return $columns;
} );每一段在做什麼
預設排序
pre_get_posts在 WordPress 查文章之前執行。用get_current_screen()確認是後台的「文章」列表(畫面代號edit-post),網站前台、頁面列表、其他後台頁面都不受影響。! $query->get( 'orderby' ):網址裡沒有指定排序時才改。點了欄位標題,網址會帶上orderby,就照你點的排。- 草稿列表 WordPress 本來就依修改時間排序,這段程式碼是讓「全部」「已發佈」也一樣。
「最後更新」欄位
manage_post_posts_columns加一個欄位,標題是「最後更新」。manage_post_posts_custom_column填欄位內容:get_the_modified_date()是最後修改時間(依網站時區),get_the_modified_author()是最後按下「更新」的人。- 作者欄顯示的是寫文章的人,這一欄是最後修改的人,兩個不一定一樣。
讓欄位可以排序
manage_edit-post_sortable_columns把「最後更新」設成可排序,點標題就用modified(修改時間)排序,第一次點是由新到舊。- 最後一個參數
'desc'表示「沒有指定排序時,表格就是依這欄由新到舊排」,欄位標題會顯示排序的箭頭。原本「日期」欄有這個標示,所以要把日期欄改寫一次、拿掉'desc',箭頭才不會標錯欄位。
實際測試的結果
測試站準備 3 篇文章:
- 三天前發佈、1 小時前被另一位編輯修改
- 昨天發佈、之後沒改過
- 2 小時前發佈
- 沒加程式碼(依發佈日期),由上到下:2 小時前發佈 → 昨天發佈 → 三天前發佈。
- 加上程式碼(依最後更新),由上到下:三天前發佈、1 小時前修改 → 2 小時前發佈 → 昨天發佈。
「最後更新」欄正確顯示時間,三天前那篇顯示的是另一位編輯的名字,其他兩篇是 admin。欄位標題有由新到舊的箭頭;點「內容標題」改依標題排序、點「日期」改回依發佈日期,都照點的欄位排。
頁面列表沒有改
「頁面」列表預設是照上下層關係排成樹狀(父頁面下面接子頁面),改成依時間排序,上下層就看不出來了,所以這段程式碼只改「文章」列表。
延伸閱讀
- WordPress functions.php 實用程式碼整理:10 個常用又安全的小技巧
- WordPress 排程自動清理垃圾留言和修訂版本:WP-Cron 寫法
- WordPress 依登入狀態、會員角色顯示部分內容:不用外掛的短代碼寫法
後台順手,更新網站內容就不會拖。正威網路行銷是 25 年經驗的基隆網頁設計工作室,建站方案都包含後台操作教學,台北與全台客戶也歡迎來聊聊。







發表留言
還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。