
WordPress 一安裝好就有 RSS,網址是 你的網址/feed/。會讀 RSS 的不只是 Feedly、Inoreader 這類閱讀器,很多電子報服務也是讀 RSS,有新文章就自動寄給訂閱的人;另外還有專門抓別人文章的採集網站。
這篇整理 4 個常用的調整,都不用外掛,程式碼放在子佈景主題的 functions.php,或用 Code Snippets 這類外掛新增:
- 新文章發佈 15 分鐘後才進 RSS
- 全站 RSS 不放某個分類
- 每篇最後加「本文出自」和原文連結
- 開頭放精選圖片
先認識 WordPress 的 RSS
- 全站文章:
/feed/ - 某個分類:
/category/分類代稱/feed/ - 留言:
/comments/feed/
後台「設定 → 閱讀」有兩個相關設定:
- 資訊提供中的近期文章顯示數量:RSS 一次列幾篇,預設 10 篇。
- 資訊提供中的文章顯示方式:「完整內容」或「內容摘要」。選摘要,讀者要點回網站才看得到全文,採集網站也只抓得到一小段。
技巧一:新文章晚 15 分鐘才進 RSS
文章按下發佈,RSS 馬上就有了。發佈後才看到錯字,電子報服務可能已經抓走寄出去;採集網站也常常是靠 RSS,幾分鐘內就把整篇搬走。讓新文章晚一點出現在 RSS,就多了一段修正的時間。
// 新文章發佈 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 的人收到:
// 全站 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 不列出,文章本身還是公開的,知道網址的人都看得到。內容要限定會員看,要另外做權限,可以參考依登入狀態、會員角色顯示部分內容。
技巧三:每篇最後加「本文出自」和原文連結
文章被採集網站整篇抓走時,至少會留下一個回到你網站的連結;讀者在閱讀器裡看文章,也能一鍵點回原文。
// 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 預設不會放精選圖片,只有內文裡本來就插的圖片會出現。很多閱讀器和電子報範本會抓文章裡的第一張圖當縮圖,沒有圖的文章看起來就是一塊純文字。
// 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)檢查。
延伸閱讀
- WordPress「更新服務」(Ping)還有用嗎?設定方式與讓 Google 更快收錄的正確做法
- WordPress 網站地圖(XML Sitemap)怎麼做?內建功能、SEO 外掛與提交 Google 教學
- WordPress 依登入狀態、會員角色顯示部分內容:不用外掛的短代碼寫法
RSS 調整好,電子報和閱讀器的讀者也能順利回到網站。正威網路行銷是 25 年經驗的基隆網頁設計工作室,網站管家年費包含系統、外掛與安全性更新和每日備份,台北與全台客戶也歡迎來聊聊。







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