ようこそのお運びで、厚く御礼申し上げます。
8日目です。なんとか1週間をこえましたね。
今日は昨日の特定のカテゴリ記事の最新記事の応用です。
記事に「現在のカテゴリの最新記事」のリンクをカテゴリ毎に3件入れる
現在表示している記事の末尾に、「現在の記事のカテゴリ」の最新記事のタイトルリンクを3件挿入します。複数のカテゴリに所属している場合は、それぞれ3件ずつ表示する
まずは、functions.phpに書いてみます。
では、functions.phpに以下のコードを書きました。
function paka3_NewNowCategoryPosts($contentData) { //個別ページ以外の記事ページにて表示 if(is_single()){ //現在の所属しているカテゴリをforeachでまわす $list=""; foreach(get_the_category() as $cat){ //条件定義 $args = array( 'posts_per_page'=>3, 'orderby' =>'post_date', //投稿日 'order' =>'DESC', 'category' => $cat->cat_ID, ); $posts =get_posts( $args ); //リスト表示 $list.="<div id='NewNowCat_".$cat->cat_ID."'>"; $list.="<div class='newPosts'><b>".$cat->cat_name."の最新記事</b>"; $list.="<ul class='mytaglist_ul'>"; //取得した最新記事をforeachでまわす foreach($posts as $post){ //更新日のフォーマット変更 $postDate = mysql2date('Y年m月d日', $post->post_date); $list.="<li><a href='". get_permalink($post->ID)."'>".$post->post_title."(更新日:".$postDate.")</a></li>"; } $list.="</ul></div></div>"; } return $list.$contentData; } return $contentData; } add_filter('the_content','paka3_NewNowCategoryPosts');
ポイントはどこ?
- 引数「$contentData」は記事本文です。
- is_single()の条件処理
個別ページ以外のすべての記事ページに表示します。
一覧で表示される不具合を回避 - add_filter:指定したフィルターフックに、関数をフックします
add_filter('フックするフィルター名','呼び出す関数名') - 現在のカテゴリの情報を取得するにはget_the_category
//カテゴリ毎に処理をする場合 foreach(get_the_category() as $cat){ //処理 }
- get_postsで取得した更新日のフォーマット定義は、
$postDate = mysql2date('Y年m月d日', $post->post_modified);
- get_postsで取得してforeachでまわす場合(get_postで取得したデータの場合)
パーマリンクにはちょっと小細工が必要($post->guidでは正しくない)get_permalink($post->id)
コードをプラグイン用のファイルにします
それではfunctions.phpに書いたコードを消して、
「paka3_NewNowCategoryPosts.php」というファイルを作成し、以下のコードを記入します。
このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。
今回のまとめ
「現在の記事のカテゴリを取得して、記事リストを表示」はforeachの入れ子が発生してしまいますので、だんだん訳が分からなくなってくる場合もあります。今回はまとめて書いた部分もあります。わからないときは無理をせず、後で見たときにわかりやすくするために、自分なりのコーディングを心がけてみましょう。