WordPressのループ内でよく使用するテンプレートタグやそれらに関連する関数の使い方についての覚え書きです。
Contents
タイトルを出力するテンプレートタグ
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
- $separator(文字列):(オプション) カテゴリーへのリンクを区切る文字列や記号(セパレータ)。デフォルトは空の文字列で
- 戻り値
-
- なし
- 利用可能な範囲
-
- ループ内
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;
?>