【WordPress】プラグインなしで関連記事・関連ページを出力
元々,Taxopress の関連記事を使っていたのだが,気づいたらエラーが出ていたので,この際,プラグインはやめて,自前の関数を呼ぶことにする.
こういうことが起こるのでプラグインは困るのである.
ということで,プラグインを使わない関連記事の表示方法について解説する.
関連記事の表示の自作方法
方針
まず,現在の原稿のタグを集めてきて,それらのタグを含む記事を集めてくる.
自分の記事も含まれるので,それを省き,ランダムに 5 個抜き出して表示する.
ショートコードで使えるようにするなら,プラグインとして作成するのが本来のようであるが,今回はプラグインとしては昨日させず,直接,single.php などに埋め込む方法をとる.
ソース
functions.php に追加
(スタイルシートは自分で適当に作ってください.)
下の例では投稿ページと固定ページの両方で関連記事を探している.
(2024/9/5 関連記事がない時の処理を追加.)
// 関連記事の表示
function insert_related() {
$cur_tags = get_the_tags();
$tags = array();
if ($cur_tags) {
foreach ($cur_tags as $tag) {
$tags[] = $tag->term_id;
}
}
$args = array(
'post_type' => array('post', 'page'),
'tag__in' => $tags,
'post__not_in' => array(get_the_ID()),
'posts_per_page' => 5,
'orderby' => 'rand',
'order' => 'DESC'
);
$stRet = "<h2>関連ページ</h2>";
if ($cur_tags) {
$stRet .= "<ul>";
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$stNew = '';
if (date('Y-m-d', strtotime('-2 week')) < get_the_modified_date('Y-m-d')) {
$stNew = 'class="new redafter blinkfadeout"';
}
$stRet .= "<li $stNew><a href='" . get_the_permalink() . "'>" . get_the_title() . "</a> <time datetime=" . get_the_modified_time('Y-m-d') . ">" . get_the_modified_time('Y.m.d') . "</time></li>";
}
}
$stRet .= "</ul>";
} else {
$stRet .= "関連ページはありません";
}
return $stRet;
}
single.php に挿入
関連記事を表示したいところ(例えば,投稿ページなら single.php)に以下を挿入する.
<?php echo insert_related(); ?>
ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.
※このページと無関係な内容のセールスはご遠慮ください.