タグに紐づいている記事一覧をショートコードで出す(v4.6.1)
「タグの一覧」ではなく「タグに紐づいている記事一覧」。関連記事一覧ですな。
参考:http://zero.edition.jp/archives/207
ただし、いろいろと動かなかったので、最終的には変えています。
functions.php
function tag_article_list( $atts) { extract( shortcode_atts( array( 'mytag' => '', ), $atts)); $mytags = get_term_by('name', $mytag, 'post_tag'); $mytag_id = $mytags->term_id; $args = array( 'tag_id' => $mytag_id, 'posts_per_page' => -1, 'post_type' => 'post', 'orderby' => 'date', 'order' => 'DESC' ); if($mytag_id){ $my_query = new WP_Query($args); if($my_query->have_posts() ){ $html = ''; $html .= '<dl class="dl_actlist">' . "\n"; while ($my_query->have_posts() ){ $my_query->the_post(); $html .= '<dt>' . esc_html( get_the_date() ) . '</dt>' . "\n"; $html .= '<dd><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></dd>' . "\n"; } $html .= '</dl>' . "\n"; } wp_reset_postdata(); return $html; } } add_shortcode('taglist', 'tag_article_list');
1.ショートコードに記述のタグを読み取る
2.タグ名からタグのIDを引っ張る
3.ループ作成
4.出力
参考と変えているのは、複数のタグに非対応にしたこと(実装時にはひとつで十分だったので)、タグIDで引っ張る形にしたこと。あと、get_template_partでループ内を記述するのではなく、$htmlに入れる形にしたこと。
変数に入れてreturnで出力する形にしたのには理由があって、変数での記述でないと、出力がなぜか固定ページの本文よりも上に出力されるので。ショートコードを記述したところに出したいのに、無関係にトップに出されると困る。
ショートコードの呼び出しは[taglist mytag="タグ名"]みたいな形で、タグ名をmytagに入れる形。日本語可。
追記:該当するタグ名がなかった場合、全クエリが表示されたため、タグIDがあった場合のみループさせるように修正。