WordPress

【WordPress(ワードプレス)】タームを指定して特定の記事情報を取得(get_term_by)して表示する方法

 

こんにちは、イケゾーです。

サブクエリとは何か
【WordPress(ワードプレス)】メインクエリとサブクエリとは?初心者向け解説

続きを見る

先日アップした記事「サブクエリとは何か」に、具体例を追加して解説をしていきます。こちらの記事では、「カテゴリを指定して最新記事を取得して表示する」方法を解説しました。

今回は、「タームを指定して特定の記事情報を取得(get_term_by)して表示す」方法を解説します。

 

【WordPress(ワードプレス)】タームを指定して特定の記事情報を取得(get_term_by)して表示する方法

この記事では、ソースコードを実際に掲載して解説していきます。

 

この記事はこんな人におすすめ!

  • WordPressの「タクソノミー」と「ターム」ってなに
  • トップページに、指定したタームの情報を表示したい
  • 作成したコードを関数化する方法を知りたい

 

 

ワードプレスおすすめ参考書
【WordPress(ワードプレス)初心者におすすめ本】「仕事の現場でサッと使える! デザイン教科書」のレビュー

続きを見る

当ブログでは、WordPressテーマ 「WING(AFFINGER5)」 を使用しています。

 

「タクソノミー」と「ターム」とは

タクソノミーとは「分類」・・・ カテゴリーとタグ

タームとは分類された「項目」・・・ Code、Life、Work

ワードプレスにおけるタクソノミーは、投稿のカテゴリータグです。つまり、いま皆さんがご覧いただいているブログ「IkezoooBlog」のタームは、「Code」「Life」「Work」となります。

今回は、このタクソノミーを指定して、ワードプレスに保存した内容を表示する方法を解説していきます。

 

【WordPressワードプレス】タームを指定して特定の記事情報を取得(get_term_by)して表示する方法

本題に入ります。
まず、この記事でやりたいことの全体図を書きましたので、イメージをつかんでください。

 

やりたいこと

  • カテゴリー作成画面で入力した「タイトル」と「説明」をトップページに表示します。
  • カテゴリーを「ニュースリリース」に分類した記事を3件取り出して、トップページに表示します。

 

完成版ソースコード

次に、完成版ソースコードで全体の流れを把握しましょう。 大切な部分に一言コメントを添えているので、参考にしてください。

front-page.php
<?php $term_obj = get_term_by( 'slug', 'news', 'category'); ?><!-- タームの条件を指定 -->
  <h2 class="section-title"><?php echo $term_obj->name; ?></h2><!-- タイトルを表示 -->
  <p class="section-lead"><?php echo $term_obj->description; ?></p><!-- 内容を表示 -->
  <ul class="news">
    <?php
    $args = array(
      'post_type' => 'post',
      'category_name' => 'news',
      'posts_per_page' => 3,
    );
    $news_posts = new WP_Query( $args );// サブクエリの作成と発行
    if( $news_posts->have_posts() ):// サブループ開始
      while( $news_posts->have_posts() ): $news_posts->the_post();
    ?>
      <li class="news-item">
        <a class="detail-link" href="<?php the_permalink(); ?>">
          <time class="time"><?php the_time('Y.m.d'); ?></time>
          <p class="title"><?php the_title(); ?></p>
          <p class="news-text"><?php echo get_the_excerpt(); ?></p>
        </a>
      </li>
    <?php
      endwhile;
      wp_reset_postdata();
    endif;// サブループ終了
    ?>
  </ul>
  <div class="section-buttons">
    <button type="button" class="button button-ghost" onclick="javascript:location.href = '<?php echo esc_url( get_term_link ( $term_obj )); ?>';">
      <?php echo $term_obj->name; ?>一覧を見る
    </button>
  </div>

 

サブクエリについては下記の記事で解説していますので、こちらをご覧ください。

 

ソースコード詳細解説

ではコードを解説していきます。

get_term_by()

この関数は取得したいタームを指定することで、タームのオブジェクトを取得できます。下記のように引数を指定します。

第一引数:どのフィールドから情報を取得したいか( id / slug / name)

第二引数:フィールドの具体的な値

第三引数:タームが属するタクソノミー

 

今回は、「slugがnewsでcategoryに属するターム」なので、get_term_by( 'slug', 'news', 'category')と指定します。

第一引数:「slug」で指定したい

第二引数:slugが「news」のものを指定したい

第三引数:ターム(news)が属するのはタクソノミーは「category」

 

これでニュースリリースの情報が取得できました。

 

サブクエリについては下記の記事で解説していますので、こちらをご覧ください。

 

【応用】関数化してリファクタリング

関数化の目的は、テンプレート内の記述がスッキリさせること、さらに他のページにて再利用できる様にすることです。
必須ではないので、余裕が出てきたら挑戦しましょう。

 

functions.php
// 特定の記事を抽出する関数
function get_specific_posts( $post_type, $taxonomy = null, $term = null, $number = -1 ){
	$args = array(
		'post_type' => 'post',
		'tax_query' => array(
			array(
				'taxonomy' => $taxonomy,
				'field' => 'slug',
				'terms' => $term,
			),
		),
		'posts_per_page' => $number,
	);
	$specific_posts = new WP_Query( $args );// サブクエリの作成と発行
	return $specific_posts;
}

 

get_specific_posts( 第一引数, 第二引数, 第三引数, 第四引数)

下記の引数を指定することで、特定の記事を抽出します。

第一引数:投稿タイプ

第二引数:取得したい記事に紐づくタームが属するタクソノミーのスラッグ

第三引数:記事が紐づくタームのスラッグ

第四引数:取得したい記事数

 

 

front-page.php
<?php $term_obj = get_term_by( 'slug', 'news', 'category'); ?><!-- タームの条件を指定する -->
  <span class="section-title-en">News Release</span>
  <h2 class="section-title"><?php echo $term_obj->name; ?></h2><!-- タイトルを表示する -->
  <p class="section-lead"><?php echo $term_obj->description; ?></p><!-- 内容を表示する -->
  <ul class="news">
    <?php
    $news_posts = get_specific_posts('post', 'category', 'news', 3);<!-- 作成した関数を使用する -->
    if( $news_posts->have_posts() ):// サブループ開始
      while( $news_posts->have_posts() ): $news_posts->the_post();
    ?>
      <li class="news-item">
        <a class="detail-link" href="<?php the_permalink(); ?>">
          <time class="time"><?php the_time('Y.m.d'); ?></time>
          <p class="title"><?php the_title(); ?></p>
          <p class="news-text"><?php echo get_the_excerpt(); ?></p>
        </a>
      </li>
    <?php
      endwhile;
      wp_reset_postdata();
    endif;// サブループ終了
    ?>
  </ul>
  <div class="section-buttons">
    <button type="button" class="button button-ghost" onclick="javascript:location.href = '<?php echo esc_url( get_term_link ( $term_obj )); ?>';">
      <?php echo $term_obj->name; ?>一覧を見る
    </button>
  </div>

 

get_term_link()

タームのオブジェクト、IDまたはスラッグを引数に指定することで、指定したタームの一覧ページのURLを取得する関数です。

esc_url()

テキストや属性などのURLを無害化するときに用いるWordPressの関数です。不正なURLを防ぎ、セキュリティ上のリスクを回避するモノです。

 

まとめ

以上で、タームを指定して特定の記事情報を取得する方法を解説しました。

イケゾー
最後まで読んでいただき、ありがとうございました。
ご不明点やご意見は、コメントやTwitterにて、お寄せください 🙂
では、またお会いしましょう

  • この記事を書いた人

ikezooo

愛知県30歳のフリーランスエンジニア。 サイト制作とブログで生き抜く。 ブログでは、月10〜15万ほど稼いでいます。 SEO検定3級保有。

-WordPress