このサイトの投稿記事の表示をカスタマイズするため、いろいろ調べたので備忘録として書いておきます。
同じような悩みを抱えている人の参考になれば、と思います。
(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の知識を深めてみては?