
このサイトの投稿記事の表示をカスタマイズするため、いろいろ調べたので備忘録として書いておきます。
同じような悩みを抱えている人の参考になれば、と思います。
(wordpressの、少し突っ込んだ内容なので、わかりにくいかもしれません…)
今回やりたかったことはこれです。
「個別記事のサイドバーに、同じカテゴリーの記事をランダムに5件表示(今見ている記事は除外)」
これを解決するには、まず記事を呼び出すがあります。
ページ内に(条件付きの)記事を表示したいときには、
・query_posts()
・new WP Query()
・get_posts()
を使う方法があります。記述の仕方とパラメータの設定に多少の差はありますが、目的はほぼ同じです。
(それぞれの違いはまた別の記事で紹介します)
今回はget_posts()関数を使うことにします。
実際にコーディングしながら説明するほうがわかりやすいと思うので、早速。
個別記事のサイドバーに、特定のカテゴリーの記事をランダムに5件表示(今見ている記事は除外)
/* 表示されているページが個別記事(single)のときのみにする */
<?php if(is_single()) : ?> // function_1
/* 記事のカテゴリーを取得 */
<?php
$categorize = get_the_category();
/* 複数のカテゴリーに配列で対応する */
$cat_list = Array();
foreach($categorize as $get_cat_list){
array_push($cat_list, $get_cat_list->cat_ID);
};
/* 表示されている記事を除外するため、記事IDを取得 */
$exclude_id = get_the_ID();
?>
/* 上記のデータを使って、条件を指定する */
<?php
$args = array(
'exclude' => $exclude_id, // 除外する記事
'cat' => $cat_list, // このカテゴリーを含む
'numberposts' => 5, // 5件分
'orderby' => rand // ランダムな順序で
);
/* 条件に合う記事を読み込む(get_posts()関数がここで登場!) */
global $post; // グローバル変数で$postを定義(!$postという名前は変更できません!)
$posts = get_posts($args);
/* 投稿情報をそれぞれグローバル変数へセット(テンプレートタグで情報を呼び出せるようになる) */
if($posts): foreach($posts as $post): setup_postdata($post); //function_2
/*
ここに、テンプレートタグやHTMLで記事の表示スタイルを記述します
ex) <a href="<?php the_permalink();?>"><?php the_title();?></a> // タイトルとリンクを表示
*/
?>
<?php endforeach; endif; ?> // function_2のif文とforeach文を閉じる
<?php wp_reset_postdata(); ?> // $postを元の値に戻す(これは絶対に必要!)
<?php endif; ?> // function_1のif文を閉じる
この処理を使って、サイドバーの一番上にある「同じカテゴリーの記事」を表示しています。
一見難しそうに見えますが、決め打ちした条件であれば、
$args = array( /* 条件文('パラメータ' => '値')*/ ); global $post; $posts = get_posts($args); if($posts): foreach($posts as $post): setup_postdata($post); /* 表示スタイルの設定 */ <?php endforeach; endif; ?> <?php wp_reset_postdata(); ?>
これで終わりです。wordpressってホントに便利。
これを覚えると、特定のカテゴリーを除外したり、特定の記事を必ず表示させたりすることも出来るようになります。
また、これを機に、wordpressやphpの知識を深めてみては?







