0%

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

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

WordPress RSS 怎麼調整:延遲發佈、排除分類、加原文連結和精選圖片

WordPress RSS 怎麼調整:延遲發佈、排除分類、加原文連結和精選圖片 封面

WordPress 一安裝好就有 RSS,網址是 你的網址/feed/。會讀 RSS 的不只是 Feedly、Inoreader 這類閱讀器,很多電子報服務也是讀 RSS,有新文章就自動寄給訂閱的人;另外還有專門抓別人文章的採集網站。

這篇整理 4 個常用的調整,都不用外掛,程式碼放在子佈景主題的 functions.php,或用 Code Snippets 這類外掛新增:

  1. 新文章發佈 15 分鐘後才進 RSS
  2. 全站 RSS 不放某個分類
  3. 每篇最後加「本文出自」和原文連結
  4. 開頭放精選圖片

先認識 WordPress 的 RSS

  • 全站文章:/feed/
  • 某個分類:/category/分類代稱/feed/
  • 留言:/comments/feed/

後台「設定 → 閱讀」有兩個相關設定:

  • 資訊提供中的近期文章顯示數量:RSS 一次列幾篇,預設 10 篇。
  • 資訊提供中的文章顯示方式:「完整內容」或「內容摘要」。選摘要,讀者要點回網站才看得到全文,採集網站也只抓得到一小段。

技巧一:新文章晚 15 分鐘才進 RSS

文章按下發佈,RSS 馬上就有了。發佈後才看到錯字,電子報服務可能已經抓走寄出去;採集網站也常常是靠 RSS,幾分鐘內就把整篇搬走。讓新文章晚一點出現在 RSS,就多了一段修正的時間。

PHP
// 新文章發佈 15 分鐘後,才出現在 RSS
add_action( 'pre_get_posts', function ( $query ) {
	if ( is_admin() || ! $query->is_main_query() || ! $query->is_feed() || $query->is_comment_feed() ) {
		return;
	}
	$query->set( 'date_query', array(
		array( 'before' => '15 minutes ago' ), // 依「設定 → 一般」的時區計算
	) );
} );
  • pre_get_posts 在 WordPress 查文章之前執行,可以改查詢條件。
  • 只改 RSS 的主要查詢(is_feed()),後台、網站頁面、留言的 RSS 都不受影響。
  • date_query 的 before 只列出 15 分鐘以前發佈的文章。想晚一點就改成 '1 hour ago'。

文章本身一發佈就看得到,晚的只有 RSS。設定排程發佈的文章,時間到了才算發佈,也是從那個時間再晚 15 分鐘。

時區要注意

'15 minutes ago' 這種寫法,WordPress 會用「設定 → 一般」的時區換算,再和文章的發佈時間比對,所以上面的寫法不用管時區。

如果在 date_query 裡多加 'column' => 'post_date_gmt'(改用世界標準時間的欄位比對),台灣的網站就會差 8 小時,延遲完全沒作用。我們在測試站試過:加了這一行,剛剛發佈的文章馬上出現在 RSS。

技巧二:全站 RSS 不放某個分類

例如「會員專區」「內部公告」這類文章,不想讓訂閱全站 RSS 的人收到:

PHP
// 全站 RSS 不放「會員專區」分類的文章(分類自己的 RSS 照常)
add_action( 'pre_get_posts', function ( $query ) {
	if ( is_admin() || ! $query->is_main_query() || ! $query->is_feed() || $query->is_category() ) {
		return;
	}
	$hidden = get_category_by_slug( 'members' ); // 換成要排除的分類代稱
	if ( $hidden ) {
		$query->set( 'category__not_in', array( $hidden->term_id ) );
	}
} );
  • get_category_by_slug( 'members' ) 用分類代稱找分類,換成你的分類代稱。用代稱比直接寫分類編號好認,搬家或重建網站編號變了也不受影響。
  • is_category() 那個判斷:只排除全站 RSS,這個分類自己的 RSS(/category/members/feed/)照常有文章。

這只是 RSS 不列出,文章本身還是公開的,知道網址的人都看得到。內容要限定會員看,要另外做權限,可以參考依登入狀態、會員角色顯示部分內容。

技巧三:每篇最後加「本文出自」和原文連結

文章被採集網站整篇抓走時,至少會留下一個回到你網站的連結;讀者在閱讀器裡看文章,也能一鍵點回原文。

PHP
// RSS 每篇文章最後加上「本文出自」和原文連結
function zw_feed_source_line( $content ) {
	$line = sprintf(
		'<p>本文出自 <a href="%1$s">%2$s</a>:<a href="%3$s">%4$s</a></p>',
		esc_url( home_url( '/' ) ),
		esc_html( get_bloginfo( 'name' ) ),
		esc_url( get_permalink() ),
		esc_html( get_the_title() )
	);
	return $content . $line;
}
add_filter( 'the_content_feed', 'zw_feed_source_line' ); // 全文
add_filter( 'the_excerpt_rss', 'zw_feed_source_line' );  // 摘要
  • the_content_feed 改的是 RSS 裡的全文,the_excerpt_rss 改的是摘要。兩個都加,不管「設定 → 閱讀」選全文還是摘要,都會有這一行。
  • 網站名稱抓「設定 → 一般」的網站標題,文章標題和網址抓這篇文章自己的,不用每篇手動加。

技巧四:RSS 開頭放精選圖片

WordPress 的 RSS 預設不會放精選圖片,只有內文裡本來就插的圖片會出現。很多閱讀器和電子報範本會抓文章裡的第一張圖當縮圖,沒有圖的文章看起來就是一塊純文字。

PHP
// RSS 文章開頭放精選圖片
function zw_feed_thumbnail( $content ) {
	if ( has_post_thumbnail() ) {
		$img     = get_the_post_thumbnail( null, 'medium_large', array( 'style' => 'max-width:100%;height:auto;' ) );
		$content = '<p>' . $img . '</p>' . $content;
	}
	return $content;
}
add_filter( 'the_content_feed', 'zw_feed_thumbnail' );
add_filter( 'the_excerpt_rss', 'zw_feed_thumbnail' );
  • 有設定精選圖片的文章,才會在最前面加上圖片。
  • medium_large 是 WordPress 自動產生的 768 像素寬的版本,比原圖小很多,電子報載入比較快。想用原圖就改成 full。
  • max-width:100% 讓圖片在手機上的閱讀器不會超出畫面。

實際測試的結果

測試網站準備了 4 篇文章:1 小時前發佈的一般文章(有精選圖片)、1 小時前的「會員專區」文章、20 分鐘前發佈的文章、剛剛發佈的文章。四段程式碼都加上後:

  • 全站 RSS 列出「20 分鐘前」和「一般文章」,剛剛發佈的沒有出現,會員專區的也沒有。
  • 「會員專區」分類自己的 RSS 照常列出那篇會員文章。
  • 一般文章的全文最前面是精選圖片,最後一行是「本文出自 網站名稱:文章標題」,兩個都是連結。
  • 「設定 → 閱讀」改成內容摘要後,摘要一樣有圖片和「本文出自」。
  • 留言的 RSS 不受影響。

改了之後 RSS 沒變?

  • 閱讀器和電子報服務有自己的快取,要等它下一次抓取,可能是幾十分鐘到幾小時。
  • 網站有裝快取外掛,先清除快取,再用瀏覽器打開 你的網址/feed/ 看。
  • 想確認 RSS 格式沒有寫壞,可以把網址貼到 W3C 的 Feed Validation Service(validator.w3.org/feed)檢查。

延伸閱讀

RSS 調整好,電子報和閱讀器的讀者也能順利回到網站。正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站管家年費包含系統、外掛與安全性更新和每日備份,台北與全台客戶也歡迎來聊聊。

分享這篇文章

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

發表留言

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

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