WordPressでRSSを取得して文字一覧で表示する方法
今回は WordPressで RSS を取得して、
RSSアイコン付き
ピンク文字
ホバー時にアンダーライン
交互に背景色変更
のような、まとめサイト風デザインで表示する方法を紹介します。
外部RSSを扱うため、表示時には esc_html() や esc_url() を使って安全に表示しています。
✅ サンプルコード
<?php
/*
Template Name: RSS用コード
Template Post Type: page
*/
if (!defined('ABSPATH')) {
exit;
}
get_header();
global $wpdb;
// WordPressのRSS取得機能を読み込む
require_once ABSPATH . WPINC . '/feed.php';
// サンプル用テーブル名
$table_name = $wpdb->prefix . 'rss_sample';
// RSS URL
$rss_url = 'https://example.com/feed/';
// RSS取得
$rss = fetch_feed($rss_url);
if (!is_wp_error($rss)) {
// 最新5件を取得
$maxitems = $rss->get_item_quantity(5);
$rss_items = $rss->get_items(0, $maxitems);
foreach ($rss_items as $item) {
// DB保存用に安全化
$title = sanitize_text_field($item->get_title());
$link = esc_url_raw($item->get_permalink());
if (empty($title) || empty($link)) {
continue;
}
// 重複チェック
$exists = $wpdb->get_var(
$wpdb->prepare(
"SELECT id FROM {$table_name} WHERE link = %s LIMIT 1",
$link
)
);
// まだ保存されていない記事だけDB保存
if (!$exists) {
$wpdb->insert(
$table_name,
[
'title' => $title,
'link' => $link,
'created_at' => current_time('mysql'),
],
[
'%s',
'%s',
'%s',
]
);
}
}
}
// DB保存済みRSSを取得
$rss_items = $wpdb->get_results(
"SELECT title, link FROM {$table_name} ORDER BY id DESC LIMIT 5"
);
?>
<style>
.sample-rss-list {
margin: 0;
padding: 0;
list-style: none;
}
.sample-rss-item {
background: #fffacd;
margin-bottom: 5px;
padding: 5px 10px;
font-size: 20px;
font-weight: bold;
}
.sample-rss-item:nth-child(even) {
background: #ffffff;
}
.sample-rss-item a {
color: #e52d77;
text-decoration: none;
}
.sample-rss-item a:hover {
text-decoration: underline;
}
.sample-rss-icon {
display: inline-block;
background: #f39c12;
color: #fff;
font-size: 11px;
font-weight: bold;
padding: 2px 4px;
margin-right: 6px;
border-radius: 2px;
}
</style>
<main>
<h1>RSS一覧サンプル</h1>
<?php if (!empty($rss_items)) : ?>
<ul class="sample-rss-list">
<?php foreach ($rss_items as $item) : ?>
<li class="sample-rss-item">
<a href="<?php echo esc_url($item->link); ?>" target="_blank" rel="noopener noreferrer">
<span class="sample-rss-icon">RSS</span>
<?php echo esc_html($item->title); ?>
</a>
</li>
<?php endforeach; ?>
</ul>
<?php else : ?>
<p>RSS記事はまだありません。</p>
<?php endif; ?>
</main>
<?php get_footer(); ?>✅ コード解説
global $wpdb;
WordPressのデータベース操作を行うための変数です。
global $wpdb;これを使うことで、WordPressのDBへアクセス出来ます。
RSS取得SQL
$rss_items = $wpdb->get_results(
"SELECT title, link FROM {$table_name} ORDER BY id DESC LIMIT 5"
);RSSテーブルから、
タイトル
URL
を取得しています。
LIMIT 5 にすることで最新5件だけ表示しています。
esc_html()
$title = esc_html($item->title);RSSタイトルを安全に表示するための処理です。
外部RSSは信用せず、HTMLタグや不正コードを無害化して表示します。
esc_url()
$link = esc_url($item->link);URLを安全に表示するための処理です。
悪意あるURLが混ざるのを防ぎます。
rel="noopener noreferrer"
rel="noopener noreferrer"外部サイトを新規タブで開く際のセキュリティ対策です。
nth-child(even)
.sample-rss-item:nth-child(even)偶数番目だけ背景色を変えています。
これにより、一覧が見やすくなります。
ホバー時のアンダーライン
.sample-rss-item a:hoverマウスを乗せた時にアンダーラインを表示しています。
リンクっぽさが強くなるため、クリックしたくなる感じを出しやすいです。
✅ 拡張機能
① 複数RSSから取得したい場合
// RSS URLを複数登録
$rss_url = [
'https://example.com/feed/',
'https://example.net/rss/',
'https://example.org/index.rdf',
];
foreach ($rss_url as $rss_url) {
// RSS取得
$rss = fetch_feed($rss_url);
if (is_wp_error($rss)) {
continue;
}
// 最新5件を取得
$maxitems = $rss->get_item_quantity(5);
$rss_items = $rss->get_items(0, $maxitems);
foreach ($rss_items as $item) {
$title = sanitize_text_field($item->get_title());
$link = esc_url_raw($item->get_permalink());
if (empty($title) || empty($link)) {
continue;
}
// 重複チェック
$exists = $wpdb->get_var(
$wpdb->prepare(
"SELECT id FROM {$table_name} WHERE link = %s LIMIT 1",
$link
)
);
if (!$exists) {
$wpdb->insert(
$table_name,
[
'title' => $title,
'link' => $link,
'created_at' => current_time('mysql'),
],
[
'%s',
'%s',
'%s',
]
);
}
}
}今はこの1行で 1サイトだけ 取得しています。
$rss_url = 'https://example.com/feed/';複数サイトにする場合は、ここを 配列 に変えて foreach で回します。
② ランダム表示へ変更したい場合
$rss_items = $wpdb->get_results(
"SELECT title, link FROM {$table_name} ORDER BY RAND() LIMIT 5"
);※ 現在は ORDER BY id DESC なので、新しい順です。
ORDER BY RAND()を使うことで、DB保存済みRSSをランダム順に並び替えています。そのためページを開くたびに表示順が変化します。
✔ サンプルページ

NoteやライブドアブログなどのRSSを取得して表示してみたい方の参考になると幸いです。
