Amazon10/19まで!プライム感謝祭開催中! セール会場へ

WordPress│他サイトの新着記事を取得するカスタマイズ

wordpress-other-site-news

2026年10月3日更新:後半のフィード方式はwaza_feed_newsという登録名に変更し、URL例を許可リストと同じフィードURLへ修正しました。

取得先は許可リストで制限し、件数は1〜20件へ制限しています。

別サイトのフィードを使う場合はallowedとurlの両方を、利用を許可された同じHTTPSフィードURLへ変更します。

前半のテンプレート方式とは別案です。

前半のSWELLテキスト版には、カテゴリのない項目への対応と出力のエスケープを反映した新しいZIPを用意しました。

他の6形式の旧配布ファイルは未改修です。

別サイトが公開しているRSSフィードから、新着記事のタイトルやリンクを取得して一覧にする方法を紹介します。

前半は子テーマにPHPテンプレートを置く方式、後半はフィード取得用のPHPとCSSを追加する方式です。

  • サブディレクトリの新着記事情報を親サイトに表示できる
  • 気になるサイトの 新着記事情報をまとめて表示できる等

以下は別サイトの記事一覧を表示した過去の画面です。

旧テーマ別の画面例と、2026年10月3日の検証結果を分けて確認してください。

実際の別サイトから記事を取得して一覧表示した例。

改訂ZIPの対象はSWELLのテキスト版だけです。

他の6形式を現在のテーマで検証済みとしたものではありません。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

他のWordPressサイトの新着記事を取得するカスタマイズ例

まずは他のWordPressサイトの新着記事を取得したカスタマイズ例をいくつかのテーマ別で紹介します。

汎用版(テキストのみ)

テキストのみの新着記事一覧です。

デモはこちらから確認できます。

テキストのみで表示した他サイトの新着記事一覧。

汎用版(サムネイルあり)

サムネイルありの新着記事一覧です。

CSSを少し追加しています。

デモはこちらから確認できます。

サムネイル付きでCSSを追加した汎用版の新着記事一覧。

SANGO(サムネイル付き)

サムネ画像付きの新着記事一覧です。

SANGOの新着リストの階層を踏襲したものになります。

デモはこちらから確認できます。

階層を踏襲してサムネイル画像付きで表示した新着記事一覧。

SWELL(テキストのみ)

テキストのみの新着記事一覧です。

SWELLの投稿リストの階層を踏襲したものになります。

デモはこちらから確認できます。

階層を踏襲したテキストのみの新着記事一覧。

SWELL(サムネイル付き)

サムネ画像付きの新着記事一覧です。

SWELLの投稿リストの階層を踏襲したものになります。

階層を踏襲してサムネイル付きで表示した新着記事一覧。

SWELL(サムネイル付き スリム版 )

サムネ画像付きのスリム版の新着記事一覧です。

SWELLの投稿リストの階層を踏襲したものになります。

デモはこちらから確認できます。

階層を踏襲したサムネイル付きスリム版の新着記事一覧。

JIN(サムネイル付き )

サムネイル付きの新着記事一覧です。

ちなみに他サイトだけでなく、自身のサイトでも表示できます。

デモはこちらから確認できます。

サムネイル付きで他サイトや自サイトの新着記事を表示した一覧。

追記

当サイトで使っているカスタマイズも追加しました。

当サイトで追加されたカスタマイズの表示例。

SWELLのテキスト版テンプレートを更新する

改訂版のdn_feed.phpと設置手順をダウンロードする(ZIP)

このZIPは、前半のSWELLテキスト版だけを対象とした2026年10月3日の改訂版です。

旧ファイルではカテゴリのないフィード項目でget_labelの呼び出しがエラーになるため、カテゴリがない場合はカテゴリ欄を省く処理に変更しました。

リンクはHTTP・HTTPSに限定し、日付・カテゴリ・タイトルはHTMLとして解釈されない形で出力します。

解凍したdn_feed.phpを子テーマ直下へ置き、後述のテンプレート方式の関数と組み合わせます。

既存ファイルを上書きする前に退避し、後半のwaza_feed_news用コードとは別方式として設置してください。

取得先は関数へ渡すトップURLに加え、テンプレート内allowedにも末尾/feed/付きのHTTPS URLを登録します。

初期値ではCG METHODとWAZAのフィードを許可し、取得件数は1〜20件に制限しています。

隔離したWordPress 7.1.2で、制御したRSSを使い、カテゴリなし・文字のエスケープ・許可外URL・1件指定・取得失敗を確認しました。

ZIPの公開URLから取得した内容は検証済みファイルと一致しています。

PC・スマホでの実表示とWP Rocketの組み合わせは未検証のため、導入先で確認してください。

戻す場合はテンプレート、関数またはスニペット、投稿内のショートコードを同じ時点のバックアップへ戻します。

他のWordPressサイトの新着記事を取得するカスタマイズのダウンロード

このカスタマイズでは、PHPのテンプレートファイルを使います。

旧配布フォルダに含まれる形式は下記になります。

  1. PHPテンプレート(汎用 サムネ無し)
  2. PHPテンプレート(汎用 サムネ有り)
  3. PHPテンプレート(SANGO サムネ有り)
  4. PHPテンプレート(SWELL サムネ無し)
  5. PHPテンプレート(SWELL サムネ有り)
  6. PHPテンプレート(SWELL サムネ有り スリム版)
  7. PHPテンプレート(JIN サムネ有り)
  8. 本文後半:functions.phpだけで機能するフィード方式(旧フォルダとは別)

他のWordPressサイトの新着記事を取得するカスタマイズの設定方法

設置前に子テーマのテンプレート、functions.phpまたはスニペット、投稿のショートコードを保存します。

SWELLのテキスト版は改訂ZIPを使い、既存の関数を重複登録しないようにしてください。

STEP
PHPテンプレートのアップロード

ダウンロードしたテンプレートを、使用中の子テーマ直下へFTPなど既存のファイル転送手段で配置します。

wp-content/themes/xxx-child

わからない方は「レンタルしているサーバー会社+FTP」で検索しましょう。

サーバー内のテーマフォルダの階層またはFTP接続の設定例。

FTPがよくわからないという方はFile Mangaerというプラグインでも作業ができます。

ファイルマネージャープラグインの管理画面。

プラグインを入れたあとファイルをドラッグ&ドロップで格納することができます。

ファイルをドラッグアンドドロップで格納するプラグインの操作画面。
STEP
functions.phpに記述

子テーマのテーマのための関数(functions.php)を編集します。

下記のコードを記述します。

function dn_feed() {
    ob_start();
	$args = [
	  'num' => 5, //新着記事数
	  'url' => 'https://www.cg-method.com/', //取得したいURL(※スラッシュまでいれる!)
	];
    get_template_part('dn_feed',null,$args);
    return ob_get_clean();
}
add_shortcode('feed', 'dn_feed');
URLや記事数を指定した関数のコード記述例。

テンプレート方式では取得先のトップURLと表示したい記事数を指定します。

改訂SWELLテキスト版では、テンプレート内のallowedにも同じ取得先のHTTPSフィードURLを登録し、件数は1〜20件にします。

STEP
記事ページにショートコードを記載する

あとは記事ページに設定したショートコード[[feed]]を記載するだけです。

記事ページへショートコードを記載した入力画面。

プレビューすると、他サイトの新着記事一覧が表示されます。

プレビューで表示された他サイトの新着記事一覧。
motoki

テンプレートにはHTMLが記載されてますので、記述を参考にお好みでカスタマイズしてみてください。※デザノマでの依頼も可。

下記は他の形式を含む旧配布フォルダです。

旧版の表示と取得処理は各テーマの実環境で未検証のため、SWELLのテキスト版には上の改訂ZIPを使ってください。

補足情報まとめ

他のWordPressサイトの新着記事を取得するカスタマイズ の補足情報をまとめました。

新着記事一覧がうまく表示されない場合

まずフィードURLが取得できるか、許可リストと一致するか、取得したい記事が配信されているかを確認します。

「全文」か「抜粋」かは配信する本文の範囲の設定です。

後半のコードはタイトル・日付・カテゴリ・リンクを使うため、「全文」を選ぶと表示できないとは一律にいえません。

下の画面は旧設定例で、表示されないという理由だけで配信元の設定を変更する必要はありません。

フィードの各投稿に含める内容を抜粋にするWordPressの設定画面。

複数サイトの新着記事を読み込む場合

functions.phpの記述を少し変えます。

関数名と登録名を分け、2つ目のテンプレート名と取得先URLを指定します。

改訂テンプレートをコピーする場合は、そのallowedにも2つ目のフィードURLを登録します。

複数サイトの新着記事を読み込むための記述変更箇所。
function dn_feed_second() {
    ob_start();
	$args = [
	  'num' => 5, //新着記事数
	  'url' => 'https://www.cg-method.com/', //取得したいURL(※スラッシュまでいれること!)
	];
    get_template_part('dn_feed2',null,$args);
    return ob_get_clean();
}
add_shortcode('feed_second', 'dn_feed_second');

あとは変更したショートコードを入力するだけです。

変更したショートコードを記事に入力した画面。

別サイトの新着記事一覧が表示されました。

複数サイト読み込みの設定後に表示された新着記事一覧。

何かございましたら、お問合せくださいませ!

2つ目のサイトは関数名と登録名を分ける

上の複数サイト用の例は、関数名をdn_feed_second、登録名をfeed_secondへ分けています。

1つ目のdn_feedと同じ関数名で追記すると、PHPの重複定義エラーになります。

テンプレートを別名のdn_feed2.phpとして子テーマに保存し、2つ目の取得先URLを設定してから、表示する場所へ[feed_second]を入力します。

同じテンプレート構造を使う場合は、1つ目のdn_feed.phpをコピーしてdn_feed2.phpを作成します。

隔離したWordPressで、別々のテンプレートへ件数とURLを渡し、両方の登録名が別の関数を呼び出すことを確認しました。

この確認はテンプレートの呼び分けが対象で、旧配布ファイルの遠隔取得処理や各テーマの表示は未検証です。

戻す場合は2つ目の登録コードと設置したショートコードをバックアップへ戻し、使わなくなったテンプレートを保存場所から退避します。

テンプレートを使わないフィード方式の設置

ちなみにMOTOKI合同会社の新着記事表示のカスタマイズも紹介しておきます。

ブログ部分はオウンドメディアとして別サイトに切り分けました。

こちらはテンプレートを使わず、子テーマのfunctions.phpまたはPHP用のCode Snippetsだけで設置する方式です。

どちらか一方にPHPを登録し、CSSは追加CSSへ貼り付けます。

サムネイルなどなしでシンプルな表示になっています。

サムネイルなしでシンプルに表示された新着記事一覧。

functions.php

以前のコードを改良しております。

function waza_fetch_news_from_feed($num, $url) {
    include_once ABSPATH . WPINC . '/feed.php';
    $num = max(1, min(20, absint($num)));
    $allowed = array('https://motoki-design.co.jp/wordpress/feed/');
    if (!in_array($url, $allowed, true)) return array();
    $feed = fetch_feed($url);
    if (is_wp_error($feed)) {
        return [];
    } else {
        $max = $feed->get_item_quantity($num);
        return $feed->get_items(0, $max);
    }
}

function waza_render_news_items($items) {
    ob_start();
    if (count($items)): ?>
        <div class="waza-feed-news">
            <ul>
                <?php foreach ($items as $item):
                    $permalink = esc_url($item->get_permalink(), array('http', 'https'));
                    if (!$permalink || !in_array(wp_parse_url($permalink, PHP_URL_SCHEME), array('http','https'), true)) continue;
                    $cat = $item->get_category();
                    $catname = $cat ? $cat->get_label() : '';
                    ?>
                    <li>
                        <a href="<?php echo $permalink; ?>">
                            <span class="news-date"><?php echo esc_html($item->get_date('Y.m.d') ?? ''); ?></span>
                            <span class="news-cat"><?php echo esc_html(wp_strip_all_tags($catname)); ?></span>
                            <span class="news-article">
                                <?php
                                $title = wp_strip_all_tags($item->get_title());
                                if (mb_strlen($title) > 32) {
                                    $title = mb_substr($title, 0, 32) . '...';
                                }
                                echo esc_html($title);
                                ?>
                            </span>
                            <span class="news-arrow"><?php echo do_shortcode('[icon class="icon-more_arrow"]'); ?></span>
                        </a>
                    </li>
                <?php endforeach; ?>
            </ul>
        </div>
    <?php endif;
    return ob_get_clean();
}

function waza_feed_news_shortcode($atts) {
    $args = shortcode_atts([
        'num' => 5,
        'url' => 'https://motoki-design.co.jp/wordpress/feed/'
    ], $atts);

    $items = waza_fetch_news_from_feed($args['num'], $args['url']);
    return waza_render_news_items($items);
}
add_shortcode('waza_feed_news', 'waza_feed_news_shortcode');

CSS

見た目はお好みで。

.waza-feed-news { margin-bottom:2em; }
.waza-feed-news ul { margin:0; padding:0; list-style:none; }
.waza-feed-news li { margin:0; border-bottom:1px solid #ccc; }
.waza-feed-news a { display:flex; flex-wrap:wrap; align-items:center; gap:.5em 1em; padding:1em 0; color:inherit; text-decoration:none; }
.waza-feed-news a:focus-visible { outline:3px solid #075aab; outline-offset:2px; }
.waza-feed-news .news-date { color:#555; }
.waza-feed-news .news-cat { border:1px solid #777; border-radius:4px; padding:0 .4em; }
.waza-feed-news .news-article { flex:1 1 12em; overflow-wrap:anywhere; }
.waza-feed-news .news-arrow { margin-left:auto; }
.waza-feed-news .icon-more_arrow:before { content:"\e921"; font-size:1.25em; }

以上です、最後にショートコード。

以下のurlにはトップページではなく、allowedと完全に一致するHTTPSフィードURLを指定します。

[[waza_feed_news num="5" url="https://motoki-design.co.jp/wordpress/feed/"]]
記事に挿入したショートコードのプレビューまたは表示結果。

後半の方式にはdn_feed.phpなどのテンプレートファイルは不要です。

PHPに加えて専用CSSも設置してください。

以上です。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/WAZA-codeにもまとめています。

フィードURLと設置名をそろえて動作を確認する

設置するもの今回のコードで使う値
許可する取得先https://motoki-design.co.jp/wordpress/feed/
ショートコードのurl許可する取得先と同じURL
登録名waza_feed_news
CSSの対象.waza-feed-newsの内側

旧例ではurlにサイトのトップページを指定していたため、許可リストの/feed/と一致せず空表示になりました。

上のショートコード例では末尾の/feed/まで含めて一致させています。

numは最大取得件数なので、配信されている記事が3件ならnum=5でも3件の表示になります。

従来のmotoki_newsは子テーマの新着記事テンプレートでも使う登録名です。

隔離環境では後から登録した方に置き換わり、RSSの3件表示がローカル投稿の5件表示へ変わることを確認しました。

両方を設置する場合に取得元が入れ替わらないよう、このフィード方式の関数名と登録名をwazaで始まる名前へ変更しています。

更新するときは旧フィード方式のPHP全体を新しいPHPへ置き換え、投稿に設置した登録名もwaza_feed_newsへ変更します。

テンプレート方式のmotoki_newsは変更しません。

両方の旧コードを残して関数を重複定義しないよう、変更前のバックアップと設置場所を確認してください。

CSSも上の全文へ置き換えます。

新しいCSSは.waza-feed-newsの内側だけを対象にし、ほかの新着記事リストと区別します。

検証ではWAZAの実フィードから3件を取得し、日付・カテゴリ・タイトル・矢印を各行に表示できました。

最初のリンクをEnterで開き、配信元の記事へ到達することも確認しています。

取得できない場合は、許可リストとの完全一致、フィードURLを直接開いた結果、配信元の件数の順に調べます。

掲載コードは許可外URL・取得エラー・0件で一覧を出さないため、空表示だけでは原因を区別できません。

更新の反映が遅い場合はfetch_feedのフィードキャッシュと表示ページのキャッシュを分けて確認します。

WordPress公式のfetch_feed()説明では、取得結果のキャッシュは既定で12時間です。

表示ページだけを再読み込みしても、配信元の最新内容に切り替わるとは限りません。

WP Rocketとの組み合わせとスマホ幅での表示は今回の検証には含めていません。

戻すときは投稿内の登録名、フィード用PHP、専用CSSを同じ時点のバックアップへ戻します。

前半のダウンロード型と後半のフィード型を同時に置き換える必要はありません。

WAZAの実フィードから取得した3件の新着記事
WAZAの実フィードから取得した3件の新着記事。2026年10月3日、隔離したWordPress 7.1.2 / SWELL 2.19.0で撮影。

よくある質問:他サイトの新着記事を取得するとき

この記事の方法は、何ができますか?

記事では、別サイトが公開しているRSSフィードから、新着記事のタイトルやリンクを取得して一覧にする方法を紹介しています。前半は子テーマにPHPテンプレートを置く方式、後半はフィード取得用のPHPとCSSを追加する方式で、サブディレクトリの新着記事情報を親サイトに表示できます。

前半のテンプレート方式と、後半のフィード方式は、どちらを使いますか?

別案です。記事では、前半のダウンロード型と後半のフィード型を同時に置き換える必要はなく、後半のwaza_feed_news用コードとは別方式として設置します。後半は、テンプレートを使わず、子テーマのfunctions.phpまたはPHP用のCode Snippetsのどちらか一方にPHPを登録し、CSSは追加CSSへ貼り付けます。

改訂ZIPは、どのテーマが対象ですか?

記事では、改訂ZIPの対象はSWELLのテキスト版だけです。他の6形式の旧配布ファイルは未改修で、現在のテーマで検証済みとしたものではありません。

取得先は、どう制限されていますか?

記事では、取得先を許可リストで制限し、件数は1〜20件に制限しています。別サイトのフィードを使う場合はallowedとurlの両方を、利用を許可された同じHTTPSフィードURLへ変更します。初期値ではCG METHODとWAZAのフィードを許可しています。

2つ目のサイトを追加するには、どうしますか?

関数名と登録名を分けます。記事では、2つ目の例を関数名dn_feed_second、登録名feed_secondとし、1つ目のdn_feedと同じ関数名で追記するとPHPの重複定義エラーになります。テンプレートを別名のdn_feed2.phpとして保存し、2つ目の取得先URLを設定します。改訂テンプレートの場合は、そのallowedにも2つ目のフィードURLを登録します。

設置前に、何をバックアップしますか?

記事では、設置前に子テーマのテンプレート、functions.phpまたはスニペット、投稿のショートコードを保存します。既存ファイルを上書きする前に退避してください。

新着記事が表示されないときは、どこを調べますか?

記事では、後半のフィード方式で取得できない場合、許可リストとの完全一致、フィードURLを直接開いた結果、配信元の件数の順に調べます。掲載コードは許可外URL・取得エラー・0件で一覧を出さないため、空表示だけでは原因を区別できません。

配信元で記事を更新しても、すぐ反映されないのはなぜですか?

記事では、WordPress公式のfetch_feed()の説明にある取得結果のキャッシュ(既定で12時間)が関係することがあるとされています。更新の反映が遅い場合は、fetch_feedのフィードキャッシュと表示ページのキャッシュを分けて確認します。表示ページだけを再読み込みしても、配信元の最新内容に切り替わるとは限りません。

元に戻すには、どうしますか?

記事では、前半のテンプレート方式はテンプレート、関数またはスニペット、投稿内のショートコードを、同じ時点のバックアップへ戻します。後半のフィード方式は、投稿内の登録名、フィード用PHP、専用CSSを同じ時点のバックアップへ戻します。

どこまで動作確認されていますか?

記事では、2026年10月3日の隔離したWordPress 7.1.2で、前半は制御したRSSによる確認(カテゴリなし・文字のエスケープ・許可外URL・1件指定・取得失敗)、後半はWAZAの実フィードから3件を取得した表示を確認したとされています。PC・スマホでの実表示、WP Rocketとの組み合わせ、旧配布ファイルの遠隔取得処理や各テーマの表示は未検証のため、導入先で確認してください。

  • URLをコピーしました!

実装を任せたい方へ

WordPressのカスタマイズ代行

ブロックの追加、テーマの改修、管理画面の調整など、記事で紹介している内容の実装を承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次