こんにちわ~おぐらです。
WordPressをはじめると、テンプレートファイルとかテンプレートタグといった似ている用語がでてきてチンプンカンプンになりませんか?
今回は「テンプレートタグ」についてまとめました。
- テンプレートタグが何なのかわからない
- テンプレートタグの使い方を知りたい
- どんなテンプレートタグがあるのかを知りたい
そんな方にオススメの記事です。
テンプレートタグはWordPressのカスタマイズには必須なので、しっかり覚えておきましょう。
WordPressテンプレートタグまとめ
まずはテンプレートタグは何なのか?からはじめていきましょう。
そして順を追って使い方などを説明します。
テンプレートタグとは
簡単に言うとWordPressが用意してくれている便利な機能。
WordPressになにかを実行したり、取得したりする指示を出すものです。
テンプレートタグはwp-includes内に定義されており、定義ファイル名には-templateの接尾辞がついています。
たとえばwp-includes/post-template.phpには記事に関するテンプレートタグが定義されているということです。
初学者にはまずいないと思いますが、テンプレートタグをカスタマイズする目的でテンプレートタグ定義ファイルを編集するのは絶対にやめてください。
理由はWordPressアップデート時に上書きされて編集内容が消えてしまうからです。
テンプレートタグはテーマやプラグインからカスタマイズできるようフィルターフックという仕組みがあるので、必ずそちらを使いましょう。
今回の記事では詳しく触れませんが、テンプレートタグのタグのカスタマイズはテーマまたはプラグインから行うことを覚えておけば大丈夫です。
テンプレートタグの紹介
ポピュラーなテンプレートタグとしてbloginfoを紹介します。
bloginfoはサイトの情報を簡単に取得、表示できます。
bloginfo( 'name' );
取得できるのは、たとえば管理画面で設定したプロフィールであったり、一般設定で入門したサイト名、サイト説明文です。
bloginfoのようにWordPressのデータを簡単に使えるよう用意されているものがテンプレートタグです。
テンプレートタグも関数なので、PHP自体にはじめから組み込まれている関数と混同してしまうかもしれませんが、別物であることを覚えておきましょう。
PHPの組み込み関数と判別するには、関数名をグーグル検索するのが簡単です。
テンプレートタグの名前にはwpやtheといった接頭辞がついていることも目印ですよ。
テンプレートタグの使い方
テンプレートタグはテーマテンプレートファイルのPHPタグ内に記述します。
下記はbloginfoを使用する例です。
<h1><?php bloginfo( 'name' ); ?></h1>
h1タグ内に管理画面の設定>一般で設定したサイトタイトルを出力しています。
bloginfoに関しては取得から出力までしてくれるため、echoする必要ありません。
テンプレートタグによって値を取得するだけのものもあります。
その場合は出力時echoが必要になります。
bloginfoはデータベースのwp-optionsテーブルからレコードを取得して出力してくれます。
処理の内容を見ると難しいことをしていると感じるかもしれませんが、そんなことを意識せずとも簡単に使えるようしてくれているのがテンプレートタグなんです。
WordPressループとの関係
少し難しい話になるかもしれませんが、テンプレートタグを使う時はWordPressのループを意識しなければならない場合があります。
なぜならループ内でしか使えないテンプレートタグがあるからです。
WordPressループとは下記のようなおなじみのコードです。
たとえば投稿のタイトルを取得、出力するthe_titleはループ内でしか使えません。
<?php if ( have_posts() ) : while ( have_posts() ) the_post(); ?>
<section>
<h2><?php the_title(); ?></h2>
</section>
<?php endwhile; endif; ?>
テンプレートタグが思ったとおりに動作しない時はループ内で使うものなのかどうかを調べてみましょう。
上記はメインループを例にしていますが、サブループでも同じです。
基本的なテンプレートタグまとめ
後半は基本的なテンプレートタグをタイプ別にまとめて紹介します。
簡単なものばかりなので覚えておきましょう。
投稿タグ
主に投稿の情報を取得、出力するものを紹介します。
タイトルを取得、出力
前半の例でも紹介したthe_titleは投稿のタイトルを取得し出力します。
引数は3つありますが、すべて省略可能です。
the_title( $before, $after, $echo );
引数$beforeはタイトルの前に付ける文字列、$afterは後に付ける文字列を設定できます。
省略した場合はタイトルのみを出力します。
$echoは出力するかどうかを真偽値で設定します。
値を取得したいだけの場合はfalseを渡しましょう。
前半の例は下記のようにも記述できます。
(h2タグのところのみ抜粋)
// タイトルの前後にh2タグを追加、、値は取得だけ
$title = the_title( '<h2>', '</h2>', false );
echo $title;
※変数の使い方をわかりやすくするための記述です。
本来はこんな回りくどい書き方をしなくて大丈夫。
本文を取得、出力
本文を取得するにはthe_contentを使用します。
引数は2つありますが、moreクイックタグを使用しない場合、省略可能です。
the_content( $more_link_text, $stripteaser );
第1引数はmoreクイックタグを使用した時のリンクテキスト。
第2引数はmore以前を隠すかどうか真偽値を渡します。
本文の抜粋を取得、出力
本文の抜粋を取得、出力するにはthe_excerptを使います。
一覧ページでは本文すべてじゃなく、抜粋を表示したい場合に有効なテンプレートタグです。
the_excerpt();
このテンプレートタグは引数を受け取りません。
投稿のパーマリンクを取得、出力
パーマリンクを出力するのはthe_permalink。
引数には投稿のIDまたは投稿オブジェクトを渡しますが、ループ内で使う場合は現在の投稿が自動的に渡されるため省略可能です。
// ループ内は引数を省略可能
the_permalink( $post );
テンプレートを呼び出す
テーマ内のテンプレートファイルを読み込むためのテンプレートタグです。
テンプレートファイルとテンプレートタグを混同しないように注意しましょう。
ヘッダーテンプレートを読み込む
ヘッダーテンプレートを読み込むにはget_headerを使います。
引数を省略するとheader.phpを、名前を渡すことで別のヘッダーテンプレートを読み込みます。
header.php以外のヘッダーテンプレート命名規則はheader-{name}.phpです。
たとえばheader-secondary.phpなど。
// header.phpを読み込み
get_header();
// header-secondary.phpを読み込み
get_header( 'secondary' );
フッターテンプレートを読み込む
フッターテンプレートを読み込むにはget_footerを使います。
引数を省略するとfooter.phpを、名前を渡すことで別のフッターテンプレートを読み込みます。
footer.php以外のヘッダーテンプレート命名規則はfooter-{name}.phpです。
たとえばfooter-secondary.phpなど。
// footer.phpを読み込み
get_footer();
// footer-secondary.phpを読み込み
get_footer( 'secondary' );
サイドバーテンプレートを読み込む
サイドバーテンプレートを読み込むにはget_sidebarを使います。
引数を省略するとsidebar.phpを、名前を渡すことで別のサイドバーテンプレートを読み込みます。
sidebar.php以外のヘッダーテンプレート命名規則はsidebar-{name}.phpです。
たとえばsidebar-secondary.phpなど。
// sidebar.phpを読み込み
get_sidebar();
// sidebar-secondary.phpを読み込み
get_sidebar( 'secondary' );
テンプレートファイルの読み込み
ヘッダー、フッター、サイドバー以外のテンプレートファイル読み込みにはget_tamplate_partを使います。
引数は2つあり、スラッグ、またはスラッグとテンプレート名を渡します。
たとえばテーマディレクトリのitem.phpを読み込むときは下記のとおり。
get_tamplate_part( 'item' );
テンプレートタグを使用した際、もしitem.phpが存在していなかった場合は読み込まれません。
ファイルの存在チェックも行ってくれているということですね。
さらにitem-special.phpを追加してみましょう。
今度はitem-special.phpを読み込みたい、そんな時に第2引数を使います。
get_tamplate_part( 'item', 'special' );
ちなみにitem-special.phpが存在していなかった時はitem.phpを読み込んでくれます。
子テーマの場合は親テーマにitem-special.phpがあるか探します。
テンプレートを読み込む優先順位は親テーマ、子テーマで変わるので注意しましょう。
バージョン5.5からはデータを渡せるようになった
WordPress5.5からテンプレート読み込み時にテンプレートタグからデータを渡せるようになりました。
今更な感じはしますが、追加してくれて本当にありがたい機能です。
使い方は簡単。
テンプレート読み込み時に配列でデータを渡してあげるだけで、テンプレートタグファイル内で$args変数を使えます。
get_header( null, ['title' => 'hello world'] );
テンプレートファイル側では$args変数を使えるようになります。
$args['title']
ヘッダー、フッター、サイドバー、その他のテンプレートファイル読み込みに使えるので5.5以降なら活用しましょう。
テーマファイルにアクセスする
テーマ内のファイルはテンプレートファイルだけではありません。
CSSやJavaScript、画像ファイルとさまざまです。
テーマ内のファイルのuriを取得するならget_theme_file_uriを、パスを取得する時はget_theme_file_pathを使います。
たとえばテーマ内cssディレクトリのfoo.cssのuriを取得する場合は下記のとおりになります。
$uri = get_theme_file_uri( 'css/foo.css' );
子テーマから親テーマのファイルのuriまたはパスを取得する時はget_parent_theme_file_uri、get_parent_theme_file_pathを使いましょう。
$uri = get_parent_theme_file_uri( 'css/foo.css' );
get_template_directory_uriがよく使われていますが、個人的にファイルのuriまたはパスを取得する時はget_parent_theme_file_uriを使うことをオススメします。
uriやパスの取得については別の記事で詳しく話しています。
もう迷わない。wordpressでテーマへのパスを取得する4つの方法
自作テーマに使ってみよう
テンプレートタグは何かからはじめてよく使うテンプレートタグを紹介してきました。
紹介したのは本当に一部のテンプレートタグなので、色々と調べてみてください。
テンプレートタグを覚えたらカスタマイズや、オリジナルテーマでぜひ使ってみてくださいね。
自作テーマの入門記事もあるので、ぜひチェックしてみてください。
【入門】WordPress自作テーマのベースをつくろう【初心者向け】
経験者の考えるWordPressテーマ自作のメリット3つ【副業に活かそう】