【WordPress】全タグ毎 or 指定タグの記事を取得して表示
本日2回目の投稿!
理由は、前回の投稿と内容はほとんど同じだから!!
しかし、最近は全然本を読んだりしてないなぁ。。。
WPF(Window)+WCFのMVVMパターンの案件があるのですが、
見事に全部未経験ということで少しは書籍とか買って読んだけど、
あまり普及されてないからか情報が結構少ないね
言語自体はC#なのでまぁなんとかなるかな。。。
まぁそれは良いとして、
今回も社畜アンテナというアンテナサイトのコードをコピペしたものになります。
大体の内容は【WordPress】全カテゴリー毎 or 指定カテゴリーの記事を取得して表示 - 俺氏、本を読むと同じ感じ。
使うテンプレートタグと、引数がちょっと違うぐらいかな?
ただ、記事の最後とかに指定タグ毎の記事を表示したい場合は、
ちょっとだけひと手間必要な場合もあります。本当にちょっとだけだけどw
全タグ毎の記事を取得して表示
<p>※タグ名クリックで最大5件まで記事が表示されます</p> <input type="checkbox" id="chkAllDisp" value="1"><label for="chkAllDisp">全表示</label> <?php $original_query = $wp_query; $tag_all = get_terms( "post_tag", "fields=all&get=all" ); foreach($tag_all as $value): ?> <h3 class="list-head"><?php echo $value->name;?></h3> <ul class="rist-ranking" style="display: none;"> <?php $posts = get_posts('numberposts=5&tag='.$value->slug); global $post;?> <?php foreach($posts as $post): ?> <p style="margin-bottom: 0px;"><?php the_time('Y/m/d H:i:s') ?></p><li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> <br /> <br /> <a class="ReBtn" href="<?php echo get_tag_link($value->term_id); ?>"><?php echo $value->name;?>の記事一覧</a> </ul> <?php endforeach; $wp_query = $original_query; wp_reset_postdata(); ?>
実際のページ:タグ別新着記事一覧 | 社畜アンテナ
指定タグ毎の記事を取得して表示
まず、使用しているテーマによって少し変わるかもしれないのですけど、
大体は以下のようにすれば多分うまくいくはず。
<?php $original_query = $wp_query; $posttags = get_the_tags(); if ($posttags): foreach($posttags as $tagitem): ?> <br /> <h4 class="kanren"><?php echo $tagitem->name; ?>の新着記事</h4> <ul class="rist-ranking"> <?php $posts = get_posts('tag='.$tagitem->slug.'&numberposts=5'); global $post;?> <?php foreach($posts as $post): ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul> <?php endforeach; endif; $wp_query = $original_query; wp_reset_postdata(); ?>
でも、もし記事の途中とかでいろいろいじくってたりすると、
「get_the_tags()」で表示中の記事のタグ情報じゃなくて、
別の記事のタグ情報が取れちゃったりします。
「get_the_tags()」を実行する前に、別カテゴリの記事一覧とか取得している場合に、
「$post」というグローバル変数が書き換えられたりなんやかんやしてしまうので、
その場合は、大体どのテーマでも表示中の記事に「the_tags()」テンプレートタグを使って、
画面にタグを表示していると思うので、
その一つ上か下の行などで、
<?php $posttags = get_the_tags(); ?>
と記述して表示中の記事のタグ情報を保持しておいてから、
上記のコードから
$posttags = get_the_tags();
だけを削除して、以下のようにすればいけるはず。
<?php $original_query = $wp_query; if ($posttags): foreach($posttags as $tagitem): ?> <br /> <h4 class="kanren"><?php echo $tagitem->name; ?>の新着記事</h4> <ul class="rist-ranking"> <?php $posts = get_posts('tag='.$tagitem->slug.'&numberposts=5'); global $post;?> <?php foreach($posts as $post): ?> <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul> <?php endforeach; endif;?> <?php $wp_query = $original_query; wp_reset_postdata(); ?>
もっとちゃんと言えば、「全タグ毎の記事を取得して表示」のコードみたいに、
「$post」の内容が上書きされてしまうような処理をする前に、
<?php $original_query = $wp_query; ?>
みたいな感じで今の状態を別変数に保持しておいて、
元に戻したい場合に以下のようにするのが普通?なのかな?
普通かどうかは分からんけども俺氏はそうしています。
<?php $wp_query = $original_query; wp_reset_postdata(); ?>
今回はこれまで、しかしコードのシンタックスハイライトがカラフルすぎて見にくいのだけど、
これってどっかの設定で変えれるのかな?
phpって指定しないほうがいいのかな?