0%

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

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

WordPress 顯示會員/作者列表頁(含頭像)

WordPress 顯示會員/作者列表頁(含頭像) 封面

公司網站的文章由好幾位同事撰寫,或是課程網站有好幾位講師,常會想做一頁「作者群」:每個人的大頭貼、自我介紹,點進去看他寫過的文章。

這篇不用外掛,寫一個短代碼 [zw_team],放到任何頁面就能顯示作者列表。

程式碼

放在子佈景主題的 functions.php,或用 Code Snippets 這類外掛新增:

PHP
// 短代碼 [zw_team role="author,editor"]:列出有發表過文章的作者,含大頭貼、自我介紹和文章數
add_shortcode( 'zw_team', function ( $atts ) {
	$atts  = shortcode_atts( array(
		'role' => 'author,editor,administrator', // 要列出哪些角色,用逗號分開
		'size' => 96,                            // 大頭貼大小(px)
	), $atts );
	$users = get_users( array(
		'role__in'            => array_map( 'trim', explode( ',', $atts['role'] ) ),
		'has_published_posts' => array( 'post' ), // 只列出有發表過文章的人
		'orderby'             => 'post_count',
		'order'               => 'DESC',
		'number'              => 50,
	) );
	if ( ! $users ) {
		return '';
	}
	$html = '<ul class="zw-team">';
	foreach ( $users as $user ) {
		$count = count_user_posts( $user->ID, 'post', true );
		$html .= '<li class="zw-team-item">'
			. get_avatar( $user->ID, (int) $atts['size'], '', $user->display_name )
			. '<div class="zw-team-text"><strong>' . esc_html( $user->display_name ) . '</strong>';
		if ( $user->description ) {
			$html .= '<p>' . esc_html( wp_strip_all_tags( $user->description ) ) . '</p>';
		}
		$html .= '<a href="' . esc_url( get_author_posts_url( $user->ID ) ) . '">看 ' . esc_html( $user->display_name ) . ' 的 ' . $count . ' 篇文章</a></div></li>';
	}
	return $html . '</ul>';
} );

怎麼用

在頁面放一個「短代碼」區塊:

純文字
[zw_team]

預設列出「作者、編輯、管理員」這三種角色裡,有發表過文章的人,文章越多的排越前面。也可以指定角色和大頭貼大小:

純文字
[zw_team role="author" size="64"]

角色名稱用英文代號:administrator(管理員)、editor(編輯)、author(作者)、contributor(投稿者)、subscriber(訂閱者)。

程式在做什麼

  • get_users() 照條件撈出使用者。has_published_posts 只留下有發表過文章的人,orderby 設成 post_count 照文章數排序,number 限制最多 50 人。
  • get_avatar() 輸出大頭貼,替代文字是作者的名字。
  • 名字用的是「公開顯示名稱」,不是登入帳號。到 使用者 → 個人資料 可以設定「暱稱」和「公開顯示名稱」。
  • 自我介紹是個人資料裡的「自傳資訊」。輸出前把 HTML 標籤拿掉,再用 esc_html() 處理,有人在自傳裡貼了奇怪的程式碼,也只會顯示成文字。
  • 最後的連結到這位作者的文章列表頁,count_user_posts() 算出他發表了幾篇。

排版 CSS

貼到「附加的 CSS」:

CSS
.zw-team {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	gap: 24px;
	padding: 0;
	list-style: none;
}
.zw-team-item {
	display: flex;
	gap: 16px;
	align-items: flex-start;
}
.zw-team-item img {
	flex-shrink: 0;
	border-radius: 50%;
}
.zw-team-text strong {
	display: block;
	font-size: 1.1em;
}
.zw-team-text p {
	margin: 4px 0 8px;
	font-size: 0.95em;
}
.zw-team-text a {
	display: inline-block;
	margin-top: 4px;
}

grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)) 會依畫面寬度自動決定一排放幾個,電腦上兩三個一排,手機上一個一排,不用另外寫手機版。

實際測試的結果

測試網站建了 5 位使用者:編輯「王主編」(3 篇文章、有自傳)、作者「林小美」(1 篇)、一位還沒發過文章的作者、一位訂閱者,以及發過 2 篇文章的投稿者。

  • [zw_team]:列出管理員、王主編、林小美,照文章數排序。沒發過文章的作者、訂閱者沒有出現;投稿者有文章,但不在預設的角色裡,也沒有出現。
  • [zw_team role="author" size="64"]:只列出林小美,大頭貼變成 64px。
  • 王主編的自傳裡故意放了 <b> 標籤,畫面上只顯示文字。
  • 每個人的「看文章」連結都能打開作者頁。
  • 1280 和 390 寬都沒有超出畫面。

兩個要注意的地方

作者頁的網址會露出登入帳號

WordPress 作者頁的網址是 你的網址/author/代稱/,代稱預設就是登入帳號。測試網站上,王主編的作者頁網址就是他的帳號。別人知道帳號,猜密碼就少了一半的難度。

  • 登入帳號不要用名字、英文名這種一看就猜得到的字。
  • 一定要搭配強密碼、兩步驟驗證或限制登入次數,請看WordPress 登入安全怎麼做?。
  • 不想公開作者頁,可以把列表裡的連結拿掉,只顯示名字和介紹。

大頭貼來自外部服務

WordPress 的大頭貼預設使用 Gravatar:用 Email 去 Gravatar 的伺服器找有沒有設定頭像,沒有就顯示灰色的預設圖。也就是說,網頁會向外部服務載入圖片。

  • 不想用外部的大頭貼,可以到 設定 → 討論,在「個人頭像」取消「顯示個人頭像」,或用外掛讓使用者上傳自己的照片。
  • 隱私權政策裡,要說明網站會使用 Gravatar 顯示頭像。

延伸閱讀

作者和講師的介紹,是讓客人信任內容的關鍵。正威網路行銷是 25 年經驗的基隆網頁設計工作室,團隊介紹、講師頁這類頁面都會依你的內容設計,台北與全台客戶也歡迎來聊聊。

分享這篇文章

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

發表留言

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

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