テンプレートタグ

2020.04.01 2020.04.02

TOPICS

翻訳元記事はこちらです。

テンプレートタグは、データベースからコンテンツを取得するためにテーマ内で使用されます。コンテンツはブログのタイトルからサイドバーまで何でもあります。テンプレートタグは、コンテンツをテーマに取り込むのに好ましい方法です。

テンプレートタグを使えば、動的なコンテンツの表示ができ、複数のテーマファイルで使用できます。
テーマをより細かく、よりわかりやすいセクションに分けています。

テンプレートタグとは?

テンプレートタグとは、WordPress にデータベースから何かを取得するように指示するコードです。これは3つのコンポーネントに分かれています。

テンプレートタグを使って、別のテーマファイルやデータベースからの情報を呼び出すことができます。

例えば、テンプレートタグ get_header() は WordPress に header.php ファイルを取得し、現在のテーマファイルに含めるように指示します。同様に、get_footer() は WordPress に footer.php ファイルを取得するように指示します。

他の種類のテンプレートタグもあります。

bloginfo()の例を見ると、括弧の間にパラメータがあることがわかります。パラメーターを使うと、以下の2つのことができます。

パラメータについては以下で幅広く取り上げていますが、データをどのように表示させたいかについては、WordPress固有の指示を送ることができることを知っておくと便利です。

なぜテンプレートタグを使うのか?

特定のコンテンツの塊のコードをすべてカプセル化することで、テンプレートタグは、テーマファイルにテンプレートの様々な部分を含めることが非常に簡単になり、テーマを維持することができます。

一つのheader.phpファイルを作成して、single.phppage.phpfront-page.phpなどのすべてのテーマテンプレートを、get_header()を使って一つのテーマファイルに参照させる方が、それぞれのテーマファイルにコードをコピーして貼り付けるよりもはるかに簡単です。また、メンテナンスも簡単になります。
header.phpファイルに変更を加えると、その変更は自動的に他のすべてのテーマファイルに引き継がれます。

テンプレートタグを使用するもう一つの理由は、動的なデータ、つまりデータベースからのデータを表示するためです。ヘッダーには、以下のように手動でtitleタグを含めることができます。

<title>My Personal Website</title>

しかし、タイトルを直接コードに書いてしまうと、ウェブサイトのタイトルを変更したいときはいつでも手動でテーマファイルを編集する必要があります。
代わりに、自動的にデータベースからサイトタイトルを取得する bloginfo( 'name' ) テンプレートタグを含める方が簡単です。
これで、テーマテンプレートをハードコーディングする代わりに、WordPressでサイトのタイトルを変更することができるようになりました。

テンプレートタグの使い方

テンプレートタグの使い方はとてもシンプルです。どのテンプレートファイルでも、テンプレートタグを呼び出すためのphpコードを1行書くだけで、テンプレートタグを使用することができます。
header.phpファイルの読み込みは以下のように簡単にできます。

get_header();

引数

テンプレートタグの中には、パラメータを渡すことができるものがあります。パラメータとは、データベースから何を取得するかを決定する追加の情報です。

例えば、bloginfo() テンプレートタグでは、WordPress に特定の情報を伝えるためのパラメータを渡すことができます。ブログ名を表示するためには、以下のようにパラメータ “name” を渡すだけです。

bloginfo( 'name' );

ブログが動作しているWordPressのバージョンを表示するには、「version」というパラメータを渡します。

bloginfo( 'version' );

各テンプレートタグでは、パラメータが異なります。パラメータのリストとその内容については、コードリファレンスの各テンプレートタグのページに記載されています。

ループ内でテンプレートタグを使用する

多くのテンプレートタグは WordPress のループ内で動作します。つまり、ループ内の指示に基づいて、ユーザーが見るページを生成するphpの「ループ」の一部としてテンプレートファイルに含まれているということです。

WordPressのループは以下のコードから始めます。
ループ内で動作するテンプレートタグは、ループ内に書く必要があります。

if ( have_posts() ) :
    while ( have_posts() ) :
        the_post();
    endwhile;
else :
    _e( 'Sorry, no posts matched your criteria.', 'devhub' );
endif;

以下のテンプレートタグは、ループ内に書く必要があります。

一部の関数でループを必要とする主な理由は、グローバルポストオブジェクトを設定する必要があるからです。

以下のテンプレートタグは、ループ内である必要はありません。

サイドバー、ヘッダー、フッターテンプレートファイルなど、好きなところに書くことができます。
これらのテンプレートタグは、グローバルポストオブジェクトを必要としません。