WordPressでは基本的にカテゴリを複数セット可能なんですがこれがなかなか曲者なんですよね。
その記事が属しているカテゴリを一つだけ出力するのは簡単なのに複数カテゴリを出力しようとするとちょっと面倒に。
今回はRSSで最新記事を3件、複数カテゴリの出力も対応出来るような記述を紹介します。
rssを読み込むphpファイルを作成
仮にrss.phpとします。
内容はこんな感じ。
<?php
//デフォルトタイムゾーンを設定
date_default_timezone_set('Asia/Tokyo');
//フィードを取得したいRSSのURLを記述
$contents = file_get_contents('https://hoge.com/blog/feed/');
//XMLをオブジェクトに変換
$rss = simplexml_load_string($contents);
//出力内容の初期化
$output = '';
$i = 0;
// 取得件数
$max = 3;
if($rss){
foreach( $rss->channel->item as $item )
{
if($i < $max){
//投稿日を取得し任意のフォーマットに変更
$date = date('Y.m.d',strtotime($item->pubDate));
//リンクURL取得
$link = $item->link;
//カテゴリ取得
$category = $item->category;
//タイトル取得
$title = $item->title;
$output .= '<li><a href="' . $link . '">';
$output .= '<div class="list-meta">';
//投稿日の出力
$output .= '<p class="date">'. $date . '</p>';
$output .= '<ul class="cat">';
//カテゴリをfor文で回すことで複数カテゴリの出力も対応
for ($j = 0; $j < count($item->category); ++$j) {
$output .= '<li>' . $category[$j] . '</li>';
}
$output .= '</ul>';
$output .= '</div>';
$output .= '<span>' . $title . '</span></a></li>';
$i++;
}
}
}
//結果の出力
echo '<ul class="list-news">'. $output . '</ul>';
出力する側の設定
出力するページ(例えばトップページならindex.phpなど)でまずはjQueryで先程のphpファイルを呼び出す。
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script>
$(function () {
$.get('rss.php', function (data) {
$('#rss').html(data);
})
});
</script>
そして出力したい場所に以下の記述を。
<div id="rss"></div><!-- /#rss -->
すると出力結果はこのようになります。
<div id="rss">
<ul class="list-news">
<li><a href="https://hoge.com/blog/04/">
<div class="list-meta">
<p class="date">0000.00.00</p>
<ul class="cat">
<li>カテゴリ2</li>
</ul>
</div><span>ブログのタイトルが入ります-04</span>
</a></li>
<li><a href="https://hoge.com/blog/03/">
<div class="list-meta">
<p class="date">0000.00.00</p>
<ul class="cat">
<li>カテゴリ2</li>
<li>カテゴリ1</li>
</ul>
</div><span>ブログのタイトルが入ります-03</span>
</a></li>
<li><a href="https://hoge.com/blog/02/">
<div class="list-meta">
<p class="date">0000.00.00</p>
<ul class="cat">
<li>カテゴリ1</li>
</ul>
</div><span>ブログのタイトルが入ります-02</span>
</a></li>
</ul>
</div>
出力する内容によってはWordPress側のfunctions.phpをいじる必要がありますが、簡単な内容でカテゴリも複数出力したい場合はこのような方法が良いのではないでしょうか。