WordPressのループ内でよく使用するテンプレートタグやそれらに関連する関数の使い方についての覚え書きです。

タイトルを出力するテンプレートタグ

the_title

現在の投稿や固定ページのタイトルを表示、または取得します。必ずループ内で使用します。

<?php the_title(); ?>

the_title( $before, $after, $echo )

パラメータ
  • $before(文字列):(オプション) タイトルの前に置くテキスト(HTML)。 初期値: ''(空の文字列)
  • $after(文字列):(オプション) タイトルの後ろに置くテキスト(HTML)。 初期値: ''(空の文字列)
  • $echo(真偽値):(オプション) タイトルを表示する場合は true、タイトルを出力せずに値を返す場合は false。初期値: true
戻り値
  • $echoが false の場合は現在の投稿タイトルとなります
利用可能な範囲
  • ループ内

タイトルをh3要素で囲って出力をしたい場合には以下のようにしてあげます。

<?php the_title( '<h3 class="sample">', '</h3>' ); ?>

上のように記述すると、以下のように出力されます。

<h3 class="sample">タイトルが出力されます</h3>

タイトルをリンク付きで出力する

<?php the_title( '<h2><a href="' . esc_url(get_permalink() ) . '">', '</a></h2>' ); ?>

以下のように記述しても同じ結果になります。

ただ、下記の書き方の場合は仮にタイトルが空だった場合、中身のないタグが出力されてしまいます。

<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

get_the_title

投稿IDを元に、投稿のタイトルを取得します。ループ外でも使えますが、その場合はパラメータにIDまたは投稿オブジェクトを指定する必要があります。

<?php $title = get_the_title(100); ?> <!--「ID 100」のタイトルを取得 -->

もし記事IDを指定しない場合は、現在の投稿記事タイトルを取得します。

get_the_title(int|WP_Post $post )

パラメータ
  • $post:(オプション) 投稿ID、もしくはタイトルを取得する投稿を特定するオブジェクト。デフォルトは、現在の投稿。
戻り値
  • 投稿のタイトル

the_title_attribute

現在の(または指定した)投稿のタイトルを表示するか、その値を返します。

the_titleと同じような機能ですが、タイトルにHTMLタグが含まれる場合、以下の関数による処理によってHTML属性として使えるようにクリーンな値にしてくれます。

  • strip_tags():文字列からHTMLおよびPHPタグを取り除く(PHP関数)
  • esc_attr():特定の文字(引用符を含む)を同等の文字実体参照へ変換(WordPress関数)

また、パラメータはクエリ文字形式で指定します。

the_title_attribute( $args )

パラメータ
  • $before(文字列):(オプション) タイトルの前に表示するテキスト。
  • $after(文字列):(オプション) タイトルの後に表示するテキスト。
  • $echo(真偽値):(オプション) タイトルを表示する場合は(true)、値として返す場合は(false)。
  • $post(整数/オブジェクト):(オプション) タイトルを取得する投稿IDまたは投稿オブジェクト。デフォルトは現在の投稿。
戻り値
  • $echoが false の場合はタイトルの値を返します

以下はthe_title_attribute()を使って、aタグのtitle属性に値を設定している例です。

the_title()でタイトルを出力し、aタグにthe_title_attribute()で「(タイトル)にリンクしています」というtitle属性を設定しています。

<a href="<?php the_permalink(); ?>"
  title="<?php the_title_attribute( array( 
  'before' => '「',
  'after' => '」にリンクしています'
  ) ); ?>">
  <?php the_title(); ?>
</a>

the_title フィルターフック

the_titleフィルターフックを使えば、カスタマイズすることもできます。

コールバック関数は引数にタイトルの文字列投稿IDを受け取ることができます。

function my_title_filter( $title, $id ) {

    return $title;
}
add_filter( 'the_title', 'my_title_filter', 10, 2 );

本文を出力するテンプレートタグ

the_content

投稿の本文を出力します。 この関数はループ内で使用します。

<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>

  <article>
   <h2><?php the_title(); ?></h2> <!-- タイトルを出力 -->
   <div><?php the_content(); ?></div> <!-- 本文を出力 -->
  </article>

  <?php endwhile; ?>
<?php endif; ?>

the_content( $more_link_text, $strip_teaser )

パラメータ
  • $more_link_text(文字列):(オプション) 本文を分割している場合は 以降を読むためのリンクとして表示するテキスト。
  • $strip_teaser(真偽値):(オプション) 以前の内容を隠すかどうか。初期値: false
戻り値
  • なし
利用可能な範囲
  • ループ内

投稿画面の新規作成画面で、本文中に<!--more-->クイックタグを挿入すると、先頭からそのクイックタグまでの本文を分割でき、抜粋と同じように表示することができます。

抜粋された箇所には以下のように、「(さらに…)」という続きを読むためリンクが出力されます。

<a href="http://grit.com/example/#more-1510" class="more-link">
  <span aria-label="続きを読む example">(さらに…)</span>
</a>

ただし、投稿の詳細ページ(「single.php」や「page.php」などの個別ページ)では、続きを読むリンクは出力されず、本文はすべて表示されます。 

リンクのクリック時にページをスクロールしない

デフォルトでは.more-link アンカー(「続きを読む」)をクリックすると、アンカー「#more-000」を含むセクション位置(<!--more--> を挿入した位置)までページがスクロールされます。

このスクロールを止めるに、以下をfunctions.phpに追記してリンクのアンカーの箇所(#more-000)を削除します。

function remove_more_link_scroll( $link ) {
	$link = preg_replace( '|#more-[0-9]+|', '', $link );
	return $link;
}
add_filter( 'the_content_more_link', 'remove_more_link_scroll' );

the_content_more_link フィルター

デフォルトでは「(さらに…)」出力される続きを読むリンクですが、表示させる文字列を変更することは可能です。「続きを読む」に変更したい場合は以下のように設定します。

function modify_read_more_link() {
  return '<a class="more-link" href="' . get_permalink() . '">続きを読む</a>';
}
add_filter('the_content_more_link', 'modify_read_more_link');

アンカー部分も出力させたい場合は以下のようにします。

function modify_read_more_link() {
  global $post; // 追加
  return '<a class="more-link" href="' . get_permalink() . '#more-' . $post->ID .'">続きを読む</a>';
}
add_filter('the_content_more_link', 'modify_read_more_link');

get_the_content

投稿の本文を取得します。この関数はループ内で使用します。

<?php get_the_content(); ?>

get_the_content( $more_link_text, $strip_teaser )

パラメータ
  • $more_link_text(文字列):(オプション) 本文を分割している場合は 以降を読むためのリンクとして表示するテキスト。
  • $strip_teaser(真偽値):(オプション) 以前の内容を隠すかどうか。初期値: false
戻り値
  • 投稿の本文
    get_the_content() で取得された値はthe_contentフィルターが適応されないので、HTMLタグを含めた文字列が返されます。         
利用可能な範囲
  • ループ内

get_the_content()で取得された値はthe_contentフィルターが適応されないので、動画の自動挿入やショートコードの展開がされないまま返されます。

HTMLタグを含まないプレーンな状態のテキストを取得したい場合は、wp_strip_all_tags()を使ってHTMLタグを取り除きます。

<?php 
  $content = get_the_content(); // 本文を取得
  $content = wp_strip_all_tags( $content ); // HTMLタグを除去
  echo $content; // 出力
?>

the_content フィルターフック

出力される本文をカスタマイズするときはthe_contentフィルターフックを使用します。

function modify_the_content( $content ) {
  // 受け取った本文($content)を加工して返す
  return $content;
}
add_filter('the_content', modify_the_content, )

次は、投稿の個別ページ(is_single)の本文末尾にシンプルなテキストを挿入する例です。

function add_content_simple_text( $content ) {
  if ( is_single() ) { // 投稿の個別ページかを判断
    $txt = '<p>どうもありがとうございました。</p>';
    $content .= $txt;
  }
  return $content;
}
add_filter( 'the_content', 'add_content_simple_text');

抜粋を出力するテンプレートタグ

the_except

投稿の抜粋を出力します。この関数はループ内で使用します。

<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>

  <article>
   <h2><?php the_title(); ?></h2>
   <div><?php the_except(); ?></div> <!-- 抜粋を出力 -->
  </article>

  <?php endwhile; ?>
<?php endif; ?>

抜粋された文字列は<p>タグで囲まれて出力されます。日本語の場合は正しく表示させるためにWP Multibyte Patchプラグインを「有効化」する必要があります。

投稿作成/編集画面の「抜粋 - 抜粋を入力」欄に抜粋したい内容を記入した場合は、記入内容がそのまま表示されます(この場合、文末に [...]は付きません)。

「抜粋 - 抜粋を入力」欄が未記入の場合は、本文の先頭から110文字までを抜粋して文末に [...](角括弧+三点リーダー)をつけて出力してくれます。(HTMLタグや画像は除去されます)

get_the_excerpt

投稿の抜粋を取得します。この関数はループ内で使用します。

get_the_excerpt( $post )

パラメータ
  • $post(文字列):(オプション) 投稿IDまたは投稿オブジェクト
戻り値
  • 投稿の抜粋された文字列
利用可能な範囲
  • ループ内

get_the_excerpt()で取得した値をカスタマイズした場合は以下のようにします。

「抜粋 - 抜粋を入力」欄に記入した内容が $my_except に格納されます。未記入の場合は、自動で生成される抜粋の文字列(wp_trim_excerptが適応された値)が格納されます。

echoで出力された値は、the_excerpt()の出力とは異なり、<p>タグでは囲まれません

<?php
  $my_excerpt = get_the_excerpt();
  if ( $my_excerpt != '' ) {
	// 取得した値をカスタマイズ
  }
  echo $my_excerpt; // カスタマイズした値を出力する
?>

has_excerpt

投稿に手動入力した抜粋があるか否かを判断する関数です。

has_excerpt( $id )

パラメータ
  • $id(整数):(オプション) 投稿ID。初期値:現在の投稿ID
戻り値
  • 手動入力された抜粋がある場合はtrue、ない場合はfalse

自動生成される抜粋を非表示にして、手動で入力した抜粋を表示させたい場合は以下のようにします。

if ( ! has_excerpt() ) {
	echo '';
} else { 
	the_excerpt();
}

抜粋をカスタマイズ

自動的に出力される抜粋の場合、デフォルトでは110文字(日本語の場合)で文末には[...]が付与されます。

抜粋の文字数を変更する

WP Multibyte Patchプラグインのexcerpt_mblength()フィルタを使用して、抜粋の文字数を20文字に変更する例です。

function change_excerpt_mblength( $length ) {
  return 20;
}
add_filter( 'excerpt_mblength', 'change_excerpt_mblength', 999 ); // 優先順位は99以上にする必要がある

次は、フロントページの抜粋は30文字で、その他のページは50文字に設定する例です。

function change_excerpt_mblength( $length ) {
  if ( is_front_page() && is_home() ) {
    return 30;
  }
return 50;
}
add_filter( 'excerpt_mblength', 'change_excerpt_mblength', 999 );

文末 [...] を変更・削除する

変更するにはexcerpt_more()フィルタを使用します。

以下は文末の「 [...]」を「…」に変更する例です。

function new_excerpt_more( $more ) {
  return '...';
}
add_filter('excerpt_more', 'new_excerpt_more');

日付・時刻を出力するテンプレートタグ

the_date

投稿の公開日を出力します。この関数はループ内で使用します。

<?php the_date(); ?>

同じ日に複数の投稿があった場合は、最初の投稿にのみ日付が出力されます。

the_date( $format, $before, $after, $echo )

パラメータ
  • $format(文字列):(オプション) ダッシュボードの「設定」→「一般」で選択した日付の形式で出力
  • $before(文字列):(オプション) 日付の直前に出力するコードやテキスト
  • $after(文字列):(オプション) 日付の直後に出力するコードやテキスト
  • $echo(真偽値):(オプション) 日付を表示する場合はtrue、表示しない場合はfalse
戻り値
  • 表示する場合はなし、出力しない場合は文字列
利用可能な範囲
  • ループ内

<p>タグで囲んで、「2023-01-13」という形式で出力させたい場合は、以下のようにします。

<?php the_date('Y-m-d', '<p class="date">', '</p>'); ?>

get_the_date

現在の投稿(または指定された投稿)の公開日を取得します。the_date()とは異なり、同日に複数の投稿があった場合にも投稿毎に日付を表示します。

get_the_date( $format, $post_id )

パラメータ
  • $format(文字列):(オプション) ダッシュボードの「設定」→「一般」で選択した日付の形式で出力
  • $post(整数):(オプション) 投稿IDまたは投稿オブジェクト。省略すると現在の投稿
戻り値
  • 指定された書式の日付の文字列
利用可能な範囲
  • 投稿IDまたは投稿オブジェクトを指定しない場合はループ内。指定する場合はループ外でもどこでも可

get_the_date()はechoを使って出力します。

以下はtime要素を使って、datetime属性にも公開日を出力する例です。

<time datetime="<?php echo get_the_date('Y-m-d'); ?>"><?php echo get_the_date('Y-m-d'); ?></time>

the_modified_time

投稿が更新された時刻(日付)を出力します。この関数はループ内で使用します。

the_modified_time( $format )

パラメータ
  • $format(文字列):(オプション) ダッシュボードの「設定」→「一般」で選択した時刻の形式で出力
戻り値
  • なし
利用可能な範囲
  • ループ内

「2023年00月00日 0:00 am」という形式で出力したい場合は以下のようにします。

<p>更新日: <?php the_modified_time('Y年n月j日 g:i a'); ?></p>

get_the_modified_time

投稿が最後に更新された時刻(日付)を取得します。

get_the_modified_time( $format, $post )

パラメータ
  • $format(文字列):(オプション) ダッシュボードの「設定」→「一般」で選択した時刻の形式で出力
  • $post(整数 オブジェクト):(オプション) 投稿IDまたは投稿オブジェクト
戻り値
  • 指定された書式の文字列
利用可能な範囲
  • 投稿IDまたは投稿オブジェクトを指定しない場合はループ内。指定する場合はループ外でもどこでも可

get_the_modified_time()はechoを使って出力します。

<p>更新日: <?php echo get_the_modified_time('Y年n月j日 g:i a'); ?></p>

投稿が更新されていた場合にのみ、更新日時を出力したい場合は以下のようにします。

<?php
  if ( get_the_time( 'YnjGi' ) !== get_the_modified_time( 'YnjGi' ) ) {
    echo '<time datetime=' . get_the_modified_time('Y-m-d') . '>' . get_the_modified_time('Y年n月j日') . '</time>';
   }
?>

the_modified_date

投稿が最後に更新された日付(時刻)を出力します。この関数はループ内で使用します。

the_modified_date( $format, $before, $after, $echo )

パラメータ
  • $format(文字列):(オプション) ダッシュボードの「設定」→「一般」で選択した日付の形式で出力
  • $before(文字列):(オプション) 日付の直前に出力するコードやテキスト
  • $after(文字列):(オプション) 日付の直後に出力するコードやテキスト
  • $echo(真偽値):(オプション) 日付を表示する場合はtrue、表示しない場合はfalse
戻り値
  • 表示する場合はなし、出力しない場合は文字列
利用可能な範囲
  • ループ内
<p>最終更新日: <?php the_modified_date('Y年n月j日'); ?></p>

get_the_modified_date

投稿が最後に更新された日付(時刻)を取得します。

get_the_modified_date( $format, $post )

パラメータ
  • $format(文字列):(オプション) ダッシュボードの「設定」→「一般」で選択した日付の形式で出力
  • $post(整数 オブジェクト):(オプション) 投稿IDまたは投稿オブジェクト
戻り値
  • 指定された書式の文字列
利用可能な範囲
  • 投稿IDまたは投稿オブジェクトを指定しない場合はループ内。指定する場合はループ外でもどこでも可

公開した日付より、更新されていれば「更新日」を表示し、更新されていなければ「公開日」を出力したい場合は以下のようにします。

<?php
  if ( get_the_date('YnjGi') !== get_the_modified_date('YnjGi') ) {
    the_modified_date('Y年n月j日', '<p class="modified_date">更新日:', '</p>');
  } else {
    echo '<p class="post_date">公開日:' . get_the_date('Y年n月j日') . '</p>';
  }
?>

パーマリンクを出力するテンプレートタグ

the_permalink

ループの中で処理されている投稿のパーマリンク(URL)を出力します。この関数はループ内で使用します。

任意の投稿のパーマリンクを出力したい場合は、get_permalink()を使用します。

the_permalink( $post )

パラメータ
  • $post(複合):(オプション) 投稿または固定ページの整数型ID、または投稿オブジェクト
利用可能な範囲
  • ループ内

投稿のタイトルを出力して、パーマリンク作成するには以下のようにします。

<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>

get_permalink

投稿または固定ページのパーマリンク(URL)を取得します。

get_permalink( $post, $leavename )

パラメータ
  • $post(複合):(オプション) 投稿または固定ページの整数型ID、または投稿オブジェクト
  • $leavename(真偽値):(オプション) 投稿名あるいは固定ページ名(%postname%)を保持するかどうか。trueの場合、実際のURLではなく構造的なリンクを返す。
    http://www.example.com/my-postではなく、http://www.example.com/%postname%
戻り値
  • パーマリンクのURL。ページが存在しない場合はfalse
利用可能な範囲
  • パラメータのIDを指定せずに一覧ページ(インデックス・アーカイブなど)のループの外側で使用した場合、現在の表示しているページのパーマリンクではなく、ループの一番歳暮の投稿のURLを返します。

get_permalink()でパーマリンクを出力させたい場合は、echoを使用します。この時、エスケープ処理(esc_url:テキストや属性などのURLを無害化する時に用いる関数)を必ず行うようにしましょう。

<?php echo esc_url( get_permalink( $post->ID )); ?>

IDを出力するテンプレートタグ

the_ID

現在の投稿IDを出力します。この関数はループ内で使用します。

the_ID()

パラメータ
  • なし
戻り値
  • なし
利用可能な範囲
  • ループ内

ループ内で投稿IDを出力したい時は以下のようにします。

<p>投稿ID: <?php the_ID(); ?></p>

投稿IDを使用して、タイトルにidを付けたい場合は以下のようにします。

id属性は数字から始めることができないので、「テキスト+数値」という形式にする必要があります。そのため数値を返すthe_ID()の前に「post-」というテキストを付けています。

<h3 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h3>

get_the_ID

現在の投稿ID(数値)を取得します。この関数はループ内で使用します。

get_the_ID()

パラメータ
  • なし
戻り値
  • 現在の投稿ID(数値)。$postが設定されていない場合はfalse
利用可能な範囲
  • ループ内

the_title()のパラメータにh3を指定して、id属性に投稿IDを利用する場合は以下のようにします。

<?php the_title('<h3 id="post-' . get_the_ID() .'">', '</h3>'); ?>

カテゴリーを出力するテンプレートタグ

the_category

現在の投稿が属するカテゴリーへのリンクを出力します。この関数はループ内で使用します。

the_category( $separator, $parents, $post_id )

パラメータ
  • $separator(文字列):(オプション) カテゴリーへのリンクを区切る文字列や記号(セパレータ)。デフォルトは空の文字列でul要素で出力。
  • $parents(文字列):(オプション) 投稿の「親子」関係の表示の仕方。デフォルトは空の文字列で、親子関係は表示しない。
    • multiple:親と子のカテゴリーへのリンクを別々に表示
    • single:子カテゴリーへのリンクのみを表示
  • $post_id(整数):(オプション) カテゴリーを取得する投稿ID。デフォルトはfalse
戻り値
  • なし
利用可能な範囲
  • ループ内

the_category()を使用して投稿が属するカテゴリーを出力してみます(パラメータを指定しない)。

<?php the_category(); ?>

パラメータを指定しない場合は、ul要素で出力されます。下記は「WordPress」というカテゴリーに属する投稿での出力のされ方です。

<ul class="post-categories">
	<li><a href="http://grit.com/category/wordpress/" rel="category tag">WordPress</a></li>
</ul>

投稿が複数のカテゴリーに属していて、コンマ区切りでカテゴリーを表示させたい場合は以下のようにします。(セパレータを指定)

<?php the_category(', '); ?>

この場合は、ul要素では出力されず、指定したセパレータで区切られたリンクが出力されます。

<a href="http://grit.com/category/wordpress/" rel="category tag">WordPress</a>
<a href="http://grit.com/category/tips/" rel="category tag">Tips</a>

get_the_category

現在の投稿が属するカテゴリーを取得します。

このテンプレートタグはデフォルトのカテゴリーを取得します。カスタムタクソノミー(カスタム分類)を取得したい場合はget_the_terms()を使用します。

get_the_category( $post_id )

パラメータ
  • $post_id(整数):(オプション) 投稿ID。デフォルトは現在の投稿ID($post->ID)
戻り値
  • カテゴリーオブジェクトの配列
利用可能な範囲
  • 投稿IDを渡せば、ループの外でも使用可能

投稿が複数のカテゴリーに属している場合もあるので、戻り値は配列になっています。

最初のカテゴリー名のみ出力させたいときは、下記のように配列の先頭要素[0]を指定してあげます。

<?php 
  $categories = get_the_category();
  echo $categories[0]->cat_name; // または echo $categories[0]->name;
?>

get_the_category()を使用して投稿が属しているカテゴリーをリンク付きで出力する場合、aタグにクラス属性などを追加したりとカスタマイズが可能です。

<?php 
  $categories = get_the_category();
  $separator = '';
  $output = '';

  if ( $categories ) { // カテゴリーが存在すれば
    foreach( $categories as $category ) {
      $output .= '<a href="'
        . esc_url( get_category_link( $category->term_id) ) // リンクを取得、esc_urlエスケープ処理
        . '" class="category-' . esc_attr( $category->slug) // クラスを追加、esc_attrエスケープ処理
        . '">' . $category->cat_name . '</a>' . $separator;
      }
      echo trim( $output, $separator );
    }
?> 

上記のようにすると、以下のようにaタグにクラス属性が追加されて出力されます。

<a href="http://grit.com/category/wordpress/" class="category-wordpress">WordPress</a>

get_category

カテゴリーIDまたはカテゴリーオブジェクトを指定して、カテゴリー情報を取得します。

get_category( $category, $output, $filter )

パラメータ
  • $category(整数 オブジェクト):(必須) カテゴリーIDまたはカテゴリーオブジェクト
  • $output(文字列):(オプション) 戻り値の型を示す定数、OBJECT, ARRAY_A または ARRAY_Nのいずれか。デフォルトはOBJECT
  • $filter(文字列):(オプション)どのようにカテゴリーフィールドを無害化するか。デフォルトは'raw'
    • raw:数値フィールドの値のみ無害化
    • edit:各種フィルターフックで無害化
    • dv:各種フィルターフックで無害化
    • display:各種フィルターフックで無害化
    • attreibute:各種フィルターフックの後、esc_attr() で無害化
    • js:各種フィルターフックの後、esc_js() で無害化
戻り値
  • $outputパラメータで定義された型のカテゴリーオブジェクト
利用可能な範囲
  • どこでも可

get_category_link

指定したカテゴリーのアーカイブページへのリンク(URL)を取得します。

get_category_link( $category )

パラメータ
  • $category(整数 オブジェクト):(必須) カテゴリーIDまたはカテゴリーオブジェクト
戻り値
  • カテゴリーアーカイブページへのリンク(URL)
利用可能な範囲
  • どこでも可

get_cat_ID()でカテゴリー名からカテゴリーIDを取得して、get_category_link()でカテゴリーページへのリンクを取得してみます。

<?php
  $category_name = 'WordPress'; // カテゴリー名を変数へ代入
  $category_id = get_cat_ID( $category_name ); // カテゴリー名からIDを取得
  $category_link = get_category_link( $category_id ); // カテゴリーIDからURLを取得
?>

<!-- カテゴリーアーカイブページへのリンクを出力 -->
<a href="<?php echo esc_url( $category_link ); ?>" title="<?php echo $category_name; ?>"><?php echo $category_name; ?></a>

「WordPress」というカテゴリーの場合は以下のように出力されます。

<a href="http://grit.com/category/wordpress/" title="WordPress">WordPress</a>

get_categories

パラメータで指定したカテゴリーオブジェクトを取得します。

get_categories( $args )

パラメータ
  • $args(文字列):(オブション)クエリ文字列形式または配列形式
戻り値
  • カテゴリーオブジェクトの配列
利用可能な範囲
  • どこでも可

最上位のカテゴリーを取得する

最上位(親)のカテゴリーを全てリンク付きで出力してみます。

<?php
  $args = array(
    'orderby' => 'name', // カテゴリーの名前順
    'parent' => 0 // 最上位(親)のカテゴリーのみ取得
  );

  $categories = get_categories( $args );

  foreach( $categories as $category ) {
    $output .= '<li><a href="'
    . esc_url( get_category_link( $category->term_id ) )
    . '">' . $category->name . '</a></li>';
  }
  echo '<ul>' . $output . '</ul>'; 
?>

全てのカテゴリーがul要素で出力されます。下記の書き方でも結果は同じです。

<ul>
<?php
  $args = array(
    'orderby' => 'name',
    'parent' => 0
  );
  $categories = get_categories( $args );
?>

<?php foreach( $categories as $category ): ?>
  <li>
    <a href="<?php echo get_category_link($category->term_id); ?>">
      <?php echo $category->name; ?>
    </a>
  </li>
<?php endforeach;?>
</ul>

タグを出力するテンプレートタグ

the_tags

現在の投稿に付けられたタグのアーカイブページへのリンク(URL)を出力します。

the_tags( $before, $sep, $after )

パラメータ
  • $before(文字列):(オブション)タグ一覧の前に表示する文字列
  • $sep(文字列):(オブション)各タグのリンク間に表示する文字列・記号。デフォルトは「,」
  • $after(文字列):(オブション)最後のタグに続けて表示する文字列。
戻り値
  • なし
利用可能な範囲
  • ループ内

タグ一覧を「Tags:」という文字列で始め、セパレータを「•」として、最後は改行させて出力したい場合は以下のようにします。

<?php the_tags( 'Tags: ', ' • ', '<br>' ); ?>

リスト形式で出力したい場合は以下のようにします。

<?php the_tags( '<ul><li>', '</li><li>', '</li></ul>' ); ?>

get_the_tags

投稿に付けられたタグを取得します。

get_the_tags( $post )

パラメータ
  • $post(文字列):(必須)投稿IDまたは投稿オブジェクト
戻り値
  • タグオブジェクトの配列
利用可能な範囲
  • 投稿IDまたは投稿オブジェクトを指定しない場合はループ内。指定する場合はループ外でもどこでも可

投稿に複数のタグが付いている場合もあるので、戻り値は配列になっています。

最初のタグ名のみ出力させたいときは、下記のように配列の先頭要素[0]を指定してあげます。

<?php 
  $tags = get_the_tags(); 
  echo $tags[0]->name; // 最初のタグ名を出力
?>

タグオブジェクトのプロパティ(メンバ変数)

タグオブジェクトは下記のようなプロパティを持ちます。

プロパティ名種類備考
term_id整数タグのID
name文字列タグ名
slug文字列タグのスラッグ
description文字列タグの説明
count整数このタグに属する総投稿数

get_the_tags()を使用して投稿に付いているタグをリンク付きで出力する場合、aタグにクラス属性などを追加したりとカスタマイズが可能です。get_the_category()と同じような使い方です。

<?php 
  $tags = get_the_tags();
  $separator = ',';
  $output = '';

  if ( $tags ) { // タグが存在すれば
    foreach( $tags as $tag ) {
      $output .= '<a href="'
        . esc_url( get_tag_link( $tag->term_id) ) // リンクを取得、esc_urlエスケープ処理
        . '" class="tag-' . esc_attr( $tag->slug) // クラスを追加、esc_attrエスケープ処理
        . '">' . $tag->name . '</a>' . $separator;
      }
      echo trim( $output, $separator );
    }
?> 

get_tag_link

指定したタグのアーカイブページへのリンク(URL)を取得します。

get_tag_link( $tag )

パラメータ
  • $tag(整数 オブジェクト):(必須)タグIDまたはタグオブジェクト
戻り値
  • タグアーカイブページへのリンク(URL)
利用可能な範囲
  • どこでも可
<?php esc_url( get_tag_link( $tag->term_id) ); ?>

get_tags

パラメータで指定したタグオブジェクトを取得します。

get_tags( $args )

パラメータ
  • $args(文字列 配列):(オプション)クエリ文字列形式または配列形式
戻り値
  • タグオブジェクトの配列
利用可能な範囲
  • どこでも可

タグオブジェクトの配列を取得して、タグアーカイブページへのリンクをul要素で出力する例です。

タグアーカイブページへのリンクはget_tag_link()で取得しています。

<?php 
  $tags = get_tags();
  $html = '<ul class="post_tags">';

  foreach ( $tags as $tag ) {
    $tag_link = get_tag_link( $tag->term_id ); // タグIDを指定してアーカイブページのリンクを取得
        
    $html .= "<li><a href='{$tag_link}' class='{$tag->slug}'>"; // クラス名にタグのスラッグを指定
    $html .= "{$tag->name}</a></li>";
  }
  $html .= '</ul>';
  echo $html;
?>