【WordPress】タグIDをもとにスラッグ名とタグのアーカイブページへのリンクを出力する

2014.10.22 Wordpress

ある特定のタグを付けてある記事のループを作ったとして、index.phpなりなんなりにそのタグの名前をだして見出しにする場合など、万が一タグのスラッグが変わってもいいようにタグIDをもとにタグ名を出力します。

	$tagData = get_term_by('ID' , $タグのID,  'post_tag');//タグのデータ
	$tagName = $tagData -> name; //スラッグ

タグのIDをはタグを作った時点から不変です。(たぶん)

管理画面の「投稿」>「タグ」から任意のタグの詳細画面にジャンプしURLを確認します。
URL中の「tag_ID=●●」となっているところの、イコール直後の数字がIDです。

それを元に、get_term_byを使ってタグの情報を検索します。
この関数はタグのほかにカテゴリ情報も検索することが出来ます。

get_term_by:WordPress私的マニュアル

第一引数には‘slug’ ‘name’ ‘ID’など指定します。今回はIDを用いて検索するので、ヒットすべきフィールドは‘ID’となります。

第二引数には検索語句を入れます。タグのIDを入れましょう。なんかの変数に予め入れておくとあとあとループ時にも使えていいと思います。

第三引数にはタクソノミー名を入れます。今回はデフォルトの投稿のタグなので‘post_tag’です。
もしカスタム投稿タイプであれこれする場合には第三引数にregister_post_type()の第一引数で指定したカスタム投稿IDを入れます。
register_post_type:WordPress私的マニュアル

$tagData変数に代入して、メンバ変数で呼び出します。
$tagData->name;の箇所でタグの名前を呼び出しています。これが変数$tagNameに入れられている状態ですね。echoすれば見出しとして使えます。

タグIDをもとに、そのタグのアーカイブページへのリンクを出力する

「●●の記事をもっと読む」的なやつです。

普通にURLを書けばいいやん…と思うかもしれませんが、それではwordpressを触っている意味がないので、動的に生成して楽しむことにします。

$termId = $tagData -> term_id;
$tagArchiveUrl = get_term_link($termId , 'post_tag'); //タグアーカイブのURL

せっかくタグの情報を格納したので、先ほどの$tagDataを使いましょう。
メンバ変数でterm_idを呼び出します。

そもそも最初にタグIDを調べているので、そんなことする必要は無いのですが、せっかくタグの情報を格納しているので、呼び出しましょう。

ちなみにget_term_by()で取得した情報から、メンバ変数で以下のようなデータを呼び出せます。

プロパティ名 データ型 意味
term_id int ID
name string 名前
slug string スラッグ
term_group int グループID
term_taxonomy_id int タクソノミーID
taxonomy string タクソノミー名。カテゴリーの場合は’category’、タグの場合は’post_tag’となる
description string 説明
parent int 親カテゴリーID。親カテゴリーがない場合は0となる
count int 投稿数

タグIDをもとにしてリンクを出力します。

get_term_link($termId , ‘post_tag’)の箇所がリンク文字列を出しています。
get_term_link:WordPress私的マニュアル

第一引数にタグIDである$termIdを入れて、第二引数にはget_term_byの時と同じく’post_tag’としておきます。
aタグのhrefに$tagArchiveUrlをechoして、これで完了です!

タグIDをもとに、アーカイブページURLとタグ名を出せる関数

どうせなので、両方自由に出力できるように関数にします。

//タグ (スラッグ)のIDをもとにタグのタイトル(動的に=変更OK)を取得して出力、アーカイブリンクも吐く
function tagArchiveObj(
	$tagNum //記事のタグIDを材料にし
	){
	$tagData = get_term_by('ID' , $tagNum,  'post_tag');//タグのデータ
	$tagName = $tagData -> name; //スラッグ

	$termId = $tagData -> term_id;

	$tagArchiveUrl = get_term_link($termId , 'post_tag'); //タグアーカイブのURL
	//ボタンを返す
	$button = 
	'<button class="more">
       <a href="' . $tagArchiveUrl . '">' .
   	  $tagData -> name . 'の記事をもっと見る' . 
       '</a>
 	</button>';

  $arr[0] = $tagName;
  $arr[1] = $button;

  //配列にまとめて返す(出力側のキーで参照)
  return $arr;

}

やっていることは、前述のget_term_byとget_term_linkを同じ関数内にまとめているだけです。

変数$buttonに代入されているHTMLは適宜に応じて変更しましょう。ちなみに今はmoreというクラスのついたbuttonです。

$arrという変数に配列を代入してreturnさせました。至極簡単なトリックですが、出力したい値を追加できるので使い方によってはもう少し拡張性があると思います。

indexなどで呼び出す際には、以下のようにします。

$tag = 23 //出力したいタグのID     
 $newArr = tagArchiveObj($tagNum = $tag); //引数にタグIDを入れて変数$newArrへ
      echo $newArr[0]; //出力 [0]…タグ名

タグIDは変数に入れておいたほうがあとあとループにも使えて、一箇所$tagに代入した値を変更するだけで一括で変わるので便利です。なんとなく、わざわざ変数にした意味がある気がしてきました。

関数の引数にはタグIDを入れて、変数に代入。その変数からキーを指定して呼び出します。
タグアーカイブのURLは以下のように呼び出します。

echo $newArr[1]; //出力 [1]…リンク

list()という関数を使って、配列の要素それぞれを一括で変数に代入する方法もありますね!
PHP: list – Manual
最初はそうしていたのですが、ソースが冗長になったのでやめました…
でも、認識しやすい変数に入れることで若干効率化する場面もありそうです。

 

以上、なぜかタグIDであれこれするということについてあまり記事が無かったのでメモしました。
意外とタグのループは役に立つと思うので、どうせならアーカイブページも出しちゃえ!って感じのノリです。

ちなみに先ほどから、タグIDを変数に代入することでループがあれこれと言いましたが、
WP_QueryやQuery_postsなどで特定のタグに絞って記事をループする箇所を想定していたためです。

<ul>
  <?php 
    $QueryNoHairetsu = array(
      'showposts' => 5 ,
      'paged' => get_query_var('paged') ,
      'tag_id' => $tag //タグIDで絞る
      );

    $posttt =  new WP_Query($QueryNoHairetsu);

    if($posttt -> have_posts()){
      while($posttt-> have_posts()){
        $posttt->the_post();
  ?>

【ここにループ処理】

<?php 
  }
}?>
</ul>

 

でわ!

Profile

東京でWebデザイナー・コーダーとして、フロントエンド的なことからデザイン思考的なことを考えたりして、ごにょごにょと活動中。(ポートフォリオ)Webクリエイターでは珍しい(?) HIPHOP, R&B好き。休日はよくカフェや漫画喫茶に出向いたりパン屋に行ったりコーヒ豆買いに行ったり、主に散歩しています。。デザインのトレンドやデザイン思考、HTML、CSSからSASS、Javascript、Wordpress構築などコーディングのTIPSなどをブログにアップしていきます。その他のことはtwitter( @satohmsys )まで。コーヒー友達募集中。