【WordPress】投稿者とタグで絞ったページを作る

いろいろ WordPress で実験していて、気づいた点があるので、メモとして残します。投稿者とタグで絞ったページについて、以下のような URL でアクセスすると WordPress が生成してくれることが分かりました。
{投稿者ページ (投稿者アーカイブ) URL}/?tag={タグのスラッグ}
具体的には、当サイトの場合 https://pancake-trail.site/article/author/pantre-developer/?tag=riyadh という URL で、pantre-developer という投稿者の書いた、riyadh というタグのページが生成されます。
このとき参照される PHP ファイルは、author.php ではなくて、tag.php になるみたいです。なので、tag.php に以下のような author 情報を URL に含むか調べる条件分岐を書きます。
<?php
$query_author = get_query_var('author');
if(empty($query_author)):
?>
<!-- ここに通常のタグページの出力を書く -->
<?php
else:
?>
<!-- ここに投稿者で絞ったのタグページの出力を書く -->
<?php
endif;
?>
例えば投稿者ページと同じデザインで、投稿者で絞ったタグページも出力したい場合、else 以降に投稿者ページと合わせたデザインを出力させます。
なお色々な条件を試したわけではないのですが、このように生成されたページでは is_author() は true で帰ってくるみたいです。is_tag() の挙動は確認していないのですが、tag.php が参照されていることを考えると、少し奇妙な気分になります。
<?php
if(is_author()):
?>
<!-- どうもここが実行されているっぽい -->
<?php
endif;
?>
WP_Query でサブループを回す場合も通常と同じようにできます。
<?php
$query_tag = get_query_var('tag');
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = [
'tag' => $query_tag,
'author' => $query_author,
'paged' => $paged
];
$the_query = new WP_Query($args);
if($the_query->have_posts()):
while($the_query->have_posts()):
$the_query->the_post(); ?>
<!-- ここに各記事の紹介を書く -->
<?php
endwhile;
endif;
$GLOBALS['wp_query']->max_num_pages = $the_query->max_num_pages;
the_posts_pagination(['prev_text' => '<<span class="sr-only">前</span>', 'next_text' => '<span class="sr-only">後</span>>']);
?>
以上、投稿者とタグで絞ったページを作る方法でした。
ちょっと宣伝
当サイトは WordPress 自作テーマを使った海外旅ブログまとめサイトとなっています。トップページに地図がありますが、地名を押すと画像が開き、画像を押すと関連記事一覧(クリック数順)が開きます。記事数が多い国ほど赤く、地名もその国で記事が多い都市の文字が大きくなるようにしています。ぜひ覗いてみてください。
当サイトで海外旅ブログを執筆することも可能です(もちろん無料です)! また既にブログをお持ちの方も、当サイトからリンクを貼ることができるようになっています。パントレ開発部までお気軽にお問い合わせください。
パントレ開発部