WordPressの関数ってびっくりするほど名前が似ていますよね。
今でもかなり混乱するのですが、初めてWordPressを触った時は混乱しすぎて目が回りそうになりました…(笑)
いつの日か慣れることを願いながら、今回は混乱しやすいターム情報やカスタム投稿の情報を取得する方法をまとめました。
ぜひ最後までご覧ください。
タームとは
よくWordPressではタームやタクソノミーなどの用語をよく聞きますよね。
名前が似ていますし、違いがわかりづらいので表で説明していきます。
タクソノミー | それぞれの投稿を分類するものをすべて。カテゴリーやタグ、カスタムタクソノミーなど |
---|---|
ターム | タクソノミーで分類されたものの項目すべて。 |
タクソノミーで分類された中身はすべてタームということです。
タームから広範囲の情報を獲得することができるので、投稿情報を取得したいという時にはタームを利用しましょう。
カスタム投稿とは
WordPressにデフォルトで入っている投稿や固定ページではなく、新しく投稿タイプを作成したものをカスタム投稿タイプといいます。
デフォルトの投稿や固定ページとは全く別のオリジナルの投稿タイプを作成することができるため、特定のコンテンツを複数作成したい時に便利です。
カスタマイズもデフォルトの投稿や固定ページと同じことができますので、その点も魅力的です。
カスタム投稿の作成方法については以下記事をご覧ください。
【WordPressカスタム投稿】記事一覧・詳細を実装してみよう(前編)
ターム情報を取得する方法
WordPressの関数は便利なものが多いですが、関数名が似ているのでつい調べてしまいます。
数ある関数の中で、今回はターム情報を取得できる関数を数個紹介します。
- 1. get_term()
➡ タームIDからカテゴリー・タグを取得 - 2. get_terms()
➡ 条件とタクソノミー情報から該当するすべてのデータを取得 - 3. get_the_terms()
➡ 投稿のタクソノミー情報を取得 - 4. get_term_by()
➡ タームIDまたはスラッグ、名前からカテゴリー・タグを取得 - 5. get_term_children()
➡ 子孫タクソノミーのIDを取得 - 6. get_term_link()
➡ 指定したタームのリンクを取得 - 7. the_terms()
➡ 投稿のカテゴリーを出力 - 8. get_queried_object()
➡ ページのリクエストに合った情報を取得
並べてみるとさらに似ているように感じますが、目的に合わせて使い分けましょう。
get_term( $term_id, $taxonomy )
タームIDまたはオブジェクトとタクソノミーから指定したタームの情報を取得します
get_term()は、入力したタームID・タクソノミーに該当するターム情報を1つだけ取得します。
戻り値は以下です。
term_id タームID name 名前 slug スラッグ term_group グループID term_taxonomy_id タクソノミーID taxonomy タクソノミー名 description 説明 parent 親カテゴリーID count 投稿数 12345678// タームID ➡ 2 ,タクソノミー ➡ tax_news の情報を取得$term = get_term('2','tax_news');// $termのタームの名前を取得$name = $term -> name;// $termのタームのスラッグを取得$slug = $term -> slug;▼関数リファレンス
関数リファレンス/get termget_terms( $taxonomy, $args )
指定したタクソノミーのターム情報を取得します
get_terms()は、入力したタクソノミーのターム情報を全て取得します。
$argsを指定してオプションをつけて取得することも可能です。
該当するすべてのターム情報を取得できるのでカテゴリー一覧などを作りたい時などに使用します。
カテゴリー一覧を作成するとこのようなサイドバーが作成できます。
戻り値は以下です。
term_id タームID name 名前 slug スラッグ term_group グループID term_taxonomy_id タクソノミーID taxonomy タクソノミー名 description 説明 parent 親カテゴリーID count 投稿数 1234567891011121314// オプション$args = array(//投稿のないタームは取得しない'hide_empty' => true,);// タクソノミー ➡ tax_news, オプション ➡ $args に該当する情報を取得$this_terms = get_terms('tax_news',$args);// 該当するすべてのターム情報が配列として格納されているので、foreachで回しますforeach ($this_terms as $each_term){// ターム名を出力echo $each_term -> name;}▼関数リファレンス
関数リファレンス/get termsget_the_terms( $post_id, $taxonomy )
投稿IDとタクソノミーからターム情報を取得します
get_the_terms()ではタームIDではなく投稿IDからターム情報を取得します。
get_terms()のように指定されたすべてのターム情報を取得するのではなく、各投稿に割り当てられているターム情報のみ取得します。
このように投稿のカテゴリーなどを取得できます。
戻り値は以下です。
term_id タームID name 名前 slug スラッグ term_group グループID term_taxonomy_id タクソノミーID taxonomy タクソノミー名 description 説明 parent 親カテゴリーID count 投稿数 123456789<?php while(have_posts()): the_post();?>// 投稿ID ➡ $post->ID, タクソノミー ➡ product_category の情報を取得$this_terms = get_the_terms($post->ID,'product_category');// 各投稿のカテゴリを表示させる<p class="cat"><?php echo $each_term[0] -> name;?><p><?php endwhile; ?>▼関数リファレンス
関数リファレンス/get the termsget_term_by( $field, $value, $taxonomy )
タームID・スラッグ・名前などとタクソノミーから該当するものを取得します
get_term_by()では指定した値をタームの全データベースから検索し、該当するものをすべて取得します。
特定の投稿情報を取得するときなどに使えるのではないかと思います。
get_term_by()を指定する際に使うパラメーターについて以下テーブルにまとめました。$field ‘id’, ‘slug’, ‘name’, ‘term_taxonomy_id’ のいずれかを指定 $value $fieldで指定したいずれかの値を指定 $taxonomy タクソノミー名を指定 戻り値は以下です。
term_id タームID name 名前 slug スラッグ term_group グループID term_taxonomy_id タクソノミーID taxonomy タクソノミー名 description 説明 parent 親カテゴリーID count 投稿数 1234$this_terms = get_term_by('slug','food','tax_product');$title = $this_terms -> name;▼関数リファレンス
関数リファレンス/get term byget_term_children( $term_id, $taxonomy )
投稿IDとタクソノミーから子孫ターム情報を取得します
get_term_children()は、入力したタームID・タクソノミーに該当する子孫ターム情報をすべて取得します。
カテゴリーの構成が複雑になった時に使いたいですね。戻り値は以下です。
ID 子孫タクソノミーのID 123456789// 親タームのID$term_id = 4;$child_terms = get_term_children($term_id,'tax_product');foreach($child_terms as $child_id){$this_term = get_term_by('id',$child_id,'tax_product');$name = $this_term -> name;}▼関数リファレンス
関数リファレンス/get term childrenget_term_link( $term, $taxonomy )
タームIDまたはオブジェクトとタクソノミーから指定されたタームのアーカイブページへのパーマリンクを取得します
get_term_link()は指定したタームのアーカイブページ(一覧ページ)のURLを取得します。
get_terms()で紹介したようなカテゴリー一覧にリンクをつけたい!という時に使えます。不正なURLを防ぎ、無害化をするためにesc_url()と一緒に使いましょう。
戻り値は以下です。
URL 指定したタームのアーカイブページ(一覧ページ)のURL 1234567891011121314// オプション$args = array(//投稿のないタームは取得しない'hide_empty' => true,);// タクソノミー ➡ tax_news, オプション ➡ $args に該当する情報を取得$this_terms = get_terms('tax_news',$args);// 該当するすべてのターム情報が配列として格納されているので、foreachで回しますforeach ($this_terms as $each_term){// URLを出力させます<a href="<?php echo esc_url(get_term_link($each_term)); ?>">要素</a>}▼関数リファレンス
関数リファレンス/get term linkthe_terms( $id, $taxonomy, [オプション : $before, $sep, $after] )
投稿IDとタクソノミーからタームを出力します
the_terms()は指定した投稿のターム(カテゴリー)を文字列として出力します。
タームだけ取得したいときや、ターム一覧を作りたい時に便利です。
パラメーターについて以下テーブルにまとめました。$id 投稿 ID $taxonomy タクソノミー $before 先頭のタームの前に表示する文字列 $sep ターム(およびリンク)を区切る文字列 $after 最後のタームに続けて表示する文字列 戻り値はなく、そのまま出力されます。
12345678<?phpthe_terms( $POST->ID, 'tax_product', 'カテゴリー : ', ',' )// 出力結果カテゴリー : 飲料, 肉類, 調味料?>▼関数リファレンス
関数リファレンス/the termsget_queried_object()
現在クエリされているもののオブジェクトを取得します。
get_queried_object()は、ページのリクエストに応じてオブジェクトを取得します。
タクソノミーページで情報を取得したい時に便利です。
表示中のページとその取得値についてまとめました。単一投稿ページ 投稿情報 固定ページ 固定ページ情報 アーカイブページ タクソノミー情報 投稿タイプアーカイブページ 投稿タイプ情報 タクソノミーページ 現在クエリ中のターム情報 戻り値は各ページによってさまざまですが、今回はタクソノミーページでの戻り値を紹介します。
term_id タームID name 名前 slug スラッグ term_group グループID term_taxonomy_id タクソノミーID taxonomy タクソノミー名 description 説明 parent 親カテゴリーID count 投稿数 filter フィルター term_order サイトすべてを対象とした通し番号 1234567$query_object = get_queried_object();// タクソノミーページで表示させたいターム名$term_name = $query_object -> name;// 投稿数$count = $query_object -> count;▼関数リファレンス
関数リファレンス/get queried object
カスタム投稿を取得する方法
カスタム投稿ではターム情報を使用して投稿を取得することができます。
そのため、「ターム情報を取得する方法」で取得したターム情報を活用することもできます。
ターム情報から投稿を取得する方法を紹介する前に、基本的なサブループについて確認しておきましょう。
カスタム投稿を使用する場合はかならず、投稿タイプを指定します。
その投稿タイプを利用し、サブループを作成してカスタム投稿を表示させましょう。
また条件を加えていくことにより取得したい投稿のみに絞れます。
サブループを作成する前に、今回取得する投稿についての情報を確認します。
投稿タイプ(post_type) | product(function.php で確認しましょう) |
---|---|
表示数(post_per_page) | すべて表示する |
表示順(orderby) | 投稿された日付順 |
上記の情報を踏まえて、まずは基本的なサブループを作成してみます。
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 | <?php // サブループの条件を作成する $args = array( 'post_type' => 'product', 'post_per_page' => '-1', 'orderby' => 'date' ); $product_query = new WP_Query($args); // 投稿があった時 if($product_query -> have_posts()): ?> <ul class="product-list"> // サブループ開始 <?php while($product_query -> have_posts()): $product_query -> the_post(); ?> <li> <a href="<?php the_permalink(); ?>"> <h3 class="ttl"><?php the_title(); ?></h3> </a> </li> <?php endwhile; ?> // サブループ終了 </ul> <?php endif; wp_reset_postdata(); ?> |
メインループに影響を及ぼさないように、ループ終了後にwp_reset_postdata()を記述しましょう。
【応用編】パラメーター : tax_query
基本的なサブループが理解できたところで、パラメーター : tax_queryを使用してターム情報から投稿を取得してみましょう。
まずはtax_queryについて軽く説明します。
tax_queryは、特定のカスタム投稿タイプの中の、特定のカテゴリーの投稿のみ取得できます。
このカテゴリーの投稿だけ表示させたい!という時に便利でよく使います。
それでは早速tax_queryを使用して、サブループの条件を作成しましょう。
1 2 3 4 5 6 7 8 9 10 11 | $args = array( 'post_type' => 'news', 'posts_per_page' => -1, 'tax_query' => array( 'taxonomy' => 'tax_news', 'field' => 'slug', 'terms' => 'company_info', ) ); |
条件が作成出来たら、あとはループを回すだけですね!
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 | // 先ほど作成したサブループの条件 <?php $args = array( 'post_type' => 'news', 'posts_per_page' => -1, 'tax_query' => array( 'taxonomy' => 'tax_news', 'field' => 'slug', 'terms' => 'company_info', ) ); $info_query = new WP_Query($args); // 投稿があった時 if($info_query -> have_posts()): ?> <ul class="news-list"> // サブループ開始 <?php while($info_query -> have_posts()): $info_query -> the_post(); ?> <li> <a href="<?php the_permalink(); ?>"> <h3 class="ttl"><?php the_title(); ?></h3> </a> </li> <?php endwhile; ?> // サブループ終了 </ul> <?php endif; wp_reset_postdata(); ?> |
このようにパラメーターで条件を付けることによって、自由自在に投稿を取得することができます。
使用できるパラメーターをまとめてくれているサイトがあるので、是非チェックしてみてください。
いっつも忘れるWP_Queryの使用方法とパラメーター一覧。がっつり整理してみた
まとめ
今回はターム情報とカスタム投稿の情報を取得する方法を紹介させていただきました。
どちらもWordPressをカスタマイズする上では必要不可欠のため、頭の片隅に置いておくと良いと思います。
紹介した関数に限らず、気になった関数は試しに使ってみると新たな発見があるかもしれませんね。
以上、最後まで読んでいただきありがとうございました。