実装者向けの記事です。
WordPressは、アクセスされたURLに基づいて「クエリ」を発行し、どういう情報を表示するか自動的に決めてくれます。
今回は、「クエリ」の内容を取得し、それを使って処理するときの実装メモです。
「クエリ」について
クエリについて、少し整理します。
「クエリ」とは
データベースへの要求のこと。Wordpressでは、URLに基づいてデータベースにクエリが発行されます。
データベースからは、クエリに基づいた投稿データが返され、所定のテンプレートにデータが書き込まれページが表示されます。
WordPressで構築されたサイトは、トップページや固定ページ、投稿記事ページやカテゴリーアーカイブなど、いくつかの条件下でページが表示されます。
これらの表示を出し分けるのが「クエリ」です。基本的にはアクセスされたURLに基づきクエリが発行され、ページの表示をコントロールします。
get_queried_object_id()
現在のページのクエリを取得するには、この関数が使えます。「get_queried_object_id()」です。
クエリしてるオブジェクトのIDを返してくれます。
例えば、こういうものが取得できます。
- 固定ページ・・・固定ページのID
- 投稿記事ページ・・・記事のID
- カテゴリアーカイブページ・・・カテゴリのID
- タグアーカイブページ・・・タグのID
実装例:表示中のカテゴリに属する投稿につけられたタグだけ一覧表示
例えばこんな使い方ができます。
ちょっとややこしい例ですが、実装サンプルを。
カスタム分類(タクソノミー)で作った、カテゴリ(ここでは”my_cat”とする)とタグ(ここでは”my_tag”とする)があります。
「my_cat」のアーカイブページで、「my_tag」のリストを表示させたい。
だけど、表示中の記事一覧の中で、どの記事にもついていないタグはリストに表示させたくないのです(ページ送りも考慮しつつ)。
地味ですが、あり得る実装です。
<?php
// 現在のカテゴリーのIDを取得
$cat_id = get_queried_object_id();
// 表示中のカテゴリーに属する投稿のIDを配列で取得
$current_posts = get_objects_in_term( $cat_id, 'my_cat' );
// 表示中のカテゴリーに属する投稿に付けられたタグの情報をまとめて取得
$current_tags = wp_get_object_terms( $current_posts, 'my_tag' );
?>
get_objects_in_term() や wp_get_object_terms() も、使えるwp組込関数ですが、別の機会に説明します。
今回のハイライトは2〜3行目で、$cat_id に現在のカテゴリIDを入れているところ。
それを使って、カテゴリーに属する投稿を取得した上で、それらの投稿につけられたタグのリストを取得しています。間接的に、カスタム分類のカテゴリとタグを紐づけることができました。
出力のコードも書いておきます。
<ul>
<?php
if ( $current_tags ) {
foreach ( $current_tags as $tag ) {
echo '<li><a href="' . get_term_link($tag) . '">'. $tag->name . '('. $tag->count . ')</a></li>' . "\n";
}
}
?>
</ul>
$current_tags には「表示中のカテゴリーに属する投稿に付けられたタグの情報」が、配列で格納されています。
foreachでループを回して、タグ名($tag->name)と、タグ一覧へのリンク(get_term_link($tag))と、ついでにそのタグが付けられた記事数($tag->count)も取得し出力してます。
よろしければどうかご感想を!
※コメントは、サイト管理者による承認後、ページに表示されます。