0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress 後台文章列表依「最後更新」排序,多一欄看誰改過(免外掛)

WordPress 後台文章列表依「最後更新」排序,多一欄看誰改過(免外掛) 封面

WordPress 後台的「文章 → 全部文章」預設依發佈日期排序,最新發佈的在最上面。

網站經營久了,常常是回頭修改舊文章:更新價格、補上新資訊、修正錯字。這些改過的舊文章還是排在很後面,想找「最近改了哪幾篇」只能一頁一頁翻。好幾個人一起管網站時,也看不出是誰改的。

這段程式碼做三件事:

  1. 文章列表預設改成依最後更新時間排序,剛改過的排最上面。
  2. 多一欄「最後更新」,顯示更新時間和最後修改的人。
  3. 這一欄可以點標題排序;點「內容標題」「日期」等其他欄位,照你點的排。

程式碼

放在子佈景主題的 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。欄位標題有由新到舊的箭頭;點「內容標題」改依標題排序、點「日期」改回依發佈日期,都照點的欄位排。

頁面列表沒有改

「頁面」列表預設是照上下層關係排成樹狀(父頁面下面接子頁面),改成依時間排序,上下層就看不出來了,所以這段程式碼只改「文章」列表。

延伸閱讀

後台順手,更新網站內容就不會拖。正威網路行銷是 25 年經驗的基隆網頁設計工作室,建站方案都包含後台操作教學,台北與全台客戶也歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

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

讓我們一起打造
您的專屬網站!