複数のタグに該当する記事一覧を固定ページに表示するショートコード【WordPress】

2016-03-01Web制作

サイトURLが変更になりました!
https://0edition.net/
お手数ですがブックマーク・RSSの再登録お願いします。

こんにちは、とみーです。

とあるタグに該当する記事を抽出したいんです。
タグが1つだけならアーカイブページで対応できるのですが、2つ以上ですとどうしたらいいのやら。

固定ページにひとつひとつリンクを貼る形にしようかと思ったのですが、手間がかかるので自動更新で対応したいです。

希望は2点。

  • 2つ以上のタグに該当する記事を取得し、一覧リストにする
  • 固定ページに表示できるようショートコード化

これらが出来るコードを探していましたが、見つけられなかったので自分で作っちゃいました。

PHPのコードを一から組むなんで10年ぶりくらいですし、WordPressの構造自体正確に理解していないので「もっと違うやり方がいいよ!」という場合があると思います。
そんな場合はぜひぜひご教示お願いします。

スポンサーリンク

サンプルページ

上記 固定ページの中身は

[mtalist mytag="Evernote,テンプレート"]

しか書いていません。

追記

テーマを変更したら下記のコードでは正常に動作しなくなったため、固定ページを表示するとそのまま中身の文字が表示されるようになっています。

コード

functions.php(子テーマ可)に追記してください。

// ***********************************************************************************
//	特定のタグの記事一覧を固定ページに表示
// ***********************************************************************************
function multi_tag_article_list( $atts ) {
	extract( shortcode_atts( array(
		'mytag' => '',
	), $atts));
  
	$mytag = explode(",", $mytag);

	$args = array(
		'tag_slug__and'=> $mytag,
	);
  
	$the_query = new WP_Query( $args );
	if ( $the_query->have_posts() ){
		while ( $the_query->have_posts() ) {
			$the_query->the_post();
			get_template_part( 'content', 'list' );
		}
	} else {
		get_template_part( 'content', 'none' );
	}
	wp_reset_postdata();
}
add_shortcode('mtalist', 'multi_tag_article_list');

ショートコード

[mtalist mytag="aa,bb,cc"]

タグ(スラッグ)をコンマで区切って指定します。

補足

お使いのテーマに合わせて変更する必要があります。

			get_template_part( 'content', 'list' );

ここが、デフォルトテーマのtwentyfifteenの場合は

			get_template_part( 'content', 'page' );

になると思います。たぶん。
(書いた後に気づいたのですが、そもそもtwentyfifteenに記事概要のみの一覧画面なかった。。。) 

何に書き換えたらいいのか分からない! という方は、index.phpを開いてみてください。

<?php get_header(); ?>  // ヘッダーを読み込み
(中略)
<?php get_footer(); ?>  // フッターを読み込み 

この2行の間にある何かが一覧リストを読み込むコードです。

Simplicityでは

<?php get_template_part('list') ?>

STINGER7では

<?php get_template_part( 'itiran' ); ?>

です。たぶん。

こちらの記事もおすすめです