wordpressで関連記事を出力するのって、プラグイン探せば出てくるんですが、まぁそれは置いといてプラグイン使わないで、やってみようかなと。
まぁタグやカテゴリーを軸にした記事の取得する方法は必ずといっていいほどやることになるだろうと思われるので検索すればたくさん記事が出てくるかと。
何がしたいのか
よくブログでみる「関連記事」とかの一覧があったりするので、カテゴリーごととか記事のタグごとの一覧をサムネイルとタイトルをつけて表示させるようにしたいと思っていますこのブログでもそうですが下記のようなイメージです。
特定のタグの一覧を呼び出す場合
どのタグの一覧を呼び出すのか分かっているようであれば管理画面のタグでタグIDが分かるので下記のように【WP_Query】を仕様してタグIDを指定すればよいと思います。
1 2 3 4 5 6 7 |
<?php $my_query = new WP_Query('tag_id=10'); ?> <?php while ($my_query->have_posts()) : $my_query->the_post(); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php endwhile; ?> <?php wp_reset_query(); ?> |
WP_Queryの引数に関しては、たくさんあって書ききれないので下記のサイトが参考になります。
関連記事に同じタグの記事一覧を出力する方法
これがメインになるんですけども、上記のコードのWP_Queryの引数に投稿記事ごとのタグIDやその他の条件(表示している記事を除く/表示件数/記事の並び替えなどの条件)を配列にして引き渡してあげることで実現できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php // 複数タグを持つ場合もあるので、その場合はランダム $tags=wp_get_post_tags($post->ID, array('orderby'=>'rand')); if($tags): ?> <?php $tag_id=$tags[0]->term_id; $args=array( 'tag__in'=>array($tag_id), // 同じタグが含まれている記事を取得 'post__not_in'=>array($post->ID),// 表示している記事を除く 'showposts'=>5,// 取得記事数 'caller_get_posts'=>1,// 取得した記事の何番目から表示するか 'order'=>'rand'// 記事をランダムで取得 ); //wp_query $my_query=new WP_Query($args); if($my_query->have_posts()): ?> <ul> <?php while($my_query->have_posts()): $my_query->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail("side_thumbnails"); ?> <?php the_title(); ?> </a> </li> <?php endwhile; ?> </ul> <?php endif; wp_reset_query(); endif;?> |
最初に使われている関数ですが、これは投稿記事の投稿タグ情報を取得することができる関数で、記事によってはタグが複数あるのでその場合は、ランダムで取得するようにしています。