俺氏、本を読む

30歳になるまでに本を読んで勉強しようかと。主に啓発、お金についての本を読むつもり。一応プログラマーなのでその辺のことも。あと、せどり(転売)の仕入れ見込み商品をリサーチして仕入先と一緒に投稿します

【WordPress】全タグ毎 or 指定タグの記事を取得して表示

本日2回目の投稿!
理由は、前回の投稿と内容はほとんど同じだから!!
 
しかし、最近は全然本を読んだりしてないなぁ。。。
WPF(Window)+WCFMVVMパターンの案件があるのですが、
見事に全部未経験ということで少しは書籍とか買って読んだけど、
あまり普及されてないからか情報が結構少ないね
言語自体は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 />&nbsp;<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って指定しないほうがいいのかな?