本篇文章更新時間:2023/09/02
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
WordPress 內建有一個預設的 RSS Feed,就是網站網址後補上 /feed/,像是: https://www.mxp.tw/feed/ 。一般來說沒特殊用途,有人跟你說要 RSS Feed 給這個連結就好!
有興趣購買本篇文章的完整 Yahoo / FTV 民視 RSS Feed 功能完整程式碼的讀者,可以使用 付款連結 金額: 3000 元新台幣,並來信聯絡告知。收到款項後隨即發信完整打包原始碼以及安裝說明。
2023/09 新增 遊戲橘子 beanfun! 的 RSS。金額: 3000 元新台幣
不過有些新聞台接收其他媒體投稿的方式雖然也是 RSS 格式,但會有自己要求的特殊欄位。
常見的有:特殊分類方式 <category>、文章特色圖片 <enclosure>,或是原本預設的欄位呈現內容的定義調整(例如描述欄位直接塞內文全文)
簡單來說,這樣的修改幅度不建議直接去修改內建的 feed 來完成,建立過一個才是正確做法。
最近剛好客戶有需求實作 民視 、 Yahoo 與 遊戲橘子 beanfun! 的 RSS Feed,正是上述的情況。面對 1. 是否需要輸出該篇文章到 Feed 上? 與 2. 輸出時需要帶入的資訊 這兩個問題,我們使用 ACF 客製化欄位工具在文章編輯處新增一些控制項。
然後就是開始在子主題中 functions.php 補上客製化 RSS 的程式:
function mxp_custom_rss_feed_channels() {
add_feed('ftv_feed', 'mxp_custom_rss_feed_for_ftv_callback');
}
add_action('init', 'mxp_custom_rss_feed_channels');
function mxp_custom_rss_feed_for_ftv_callback() {
get_template_part('rss', 'ftv');
}
這邊舉例民視的為主,宣告新增一個 ftv_feed 的 Feed,然後指定一個樣板 rss-ftv.php。
然後就是一樣子主題下編輯 rss-ftv.php 檔案,加入下方的程式:
<?php
/**
* Template Name: 民視 FTV RSS
*/
function wxr_cdata($str) {
$str = '<![CDATA[' . str_replace(']]>', ']]]]><![CDATA[>', $str) . ']]>';
return $str;
}
$posts = get_posts(
array(
'numberposts' => 10,
'orderby' => 'date',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'rss1_control',
'value' => '1',
'compare' => '=',
),
),
)
);
header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="' . get_option('blog_charset') . '"?>';
?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" <?php do_action('rss2_ns');?>>
<channel>
<title><?php wxr_cdata(bloginfo_rss('name'));?> - FTVFeed</title>
<atom:link href="<?php self_link();?>" rel="self" type="application/rss+xml" />
<link><?php bloginfo_rss('url')?></link>
<description><?php bloginfo_rss('description')?></description>
<pubDate><?php echo mysql2date('D, d M Y H:i:s +0800', get_lastpostmodified('GMT'), false); ?></pubDate>
<language>zh-tw</language>
<sy:updatePeriod><?php echo apply_filters('rss_update_period', 'hourly'); ?></sy:updatePeriod>
<sy:updateFrequency><?php echo apply_filters('rss_update_frequency', '1'); ?></sy:updateFrequency>
<?php
do_action('rss2_head');
foreach ($posts as $index => $post) {
$item = '<item>';
$item .= '<title>' . apply_filters('the_title_rss', $post->post_title) . '</title>' . PHP_EOL;
$item .= '<link>' . esc_url(apply_filters('the_permalink_rss', get_the_permalink($post->ID))) . '</link>' . PHP_EOL;
$item .= '<pubDate>' . mysql2date('D, d M Y H:i:s +0800', get_post_time('Y-m-d H:i:s', true), false) . '</pubDate>' . PHP_EOL;
$item .= '<dc:creator>' . get_the_author_meta('display_name', $post->post_author) . '</dc:creator>' . PHP_EOL;
$item .= '<guid isPermaLink="false">' . get_the_guid($post->ID) . '</guid>' . PHP_EOL;
$item .= '<description><![CDATA[' . apply_filters('the_content_rss', get_the_content($post->ID)) . ']]></description>' . PHP_EOL;
$thumbnail_id = get_post_thumbnail_id($post->ID);
if ($thumbnail_id !== false) {
$img_url = wp_get_attachment_image_url($thumbnail_id);
$upload_dir = wp_upload_dir();
$item .= '<enclosure url="' . $img_url . '" type="' . get_post_mime_type($thumbnail_id) . '"/>' . PHP_EOL;
}
$cat_id = get_post_meta($post->ID, 'rss1_rss_cat', true);
$cat_name = get_cat_name($cat_id);
$the_cat_list = "<category>" . $cat_name . "</category>" . PHP_EOL;
echo $item . $the_cat_list;
rss_enclosure();
do_action('rss2_item');
echo '</item>' . PHP_EOL;
$item = '';
}
echo '</channel></rss>';
都建立完成後,要去後台「設定」->「永久連結」重新存擋一次來啟用,這樣就完成客製化一個新的 RSS 囉~
其他媒體平台有個別的需求也是比照辦理即可。

你這篇早點出來多好,我之前弄LINE的弄好久啊!
哈 剛好最近實作就筆記一下。 是說你弄的 LINE 是 LINE Today 嗎? 我有看到有人開源: https://tw.wordpress.org/plugins/line-today-feed-by-tannysoft/
對,LINE Today,不過我在弄的時候是2018年初,這個外掛或許還沒出來,不然他有用 feed 這個 tag,應該會找到才是。
看來是你走太快了XDD