テーマファイルのリンクとディレクトリ

2020.04.01 2020.04.02

TOPICS

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

コアテーマファイルへのリンク

お分かりのように、WordPressのテーマはいくつかの異なるテンプレートファイルから構築されています。
少なくとも、これには通常、sidebar.phpheader.phpfooter.phpが含まれます。これらは、次のテンプレートタグを使用して呼ばれています。

これらのファイルのカスタムバージョンを作成するには、sidebar-{your_custom_template}.phpheader-{your_custom_template}.phpfooter-{your_custom_template}.phpという名前をつけることで、これらのファイルを呼び出すことができます。そして、以下のようにカスタムテンプレート名をパラメータにしてテンプレートタグを使用することができます。

get_header( 'your_custom_template' );
get_footer( 'your_custom_template' );
get_sidebar( 'your_custom_template' );

WordPress は様々なファイルを組み立てることでページを作成しています。
ヘッダー、フッター、サイドバー用の標準ファイルの他に、カスタムテンプレートファイルを作成し、get_template_part()を使ってページ内の任意の場所で呼び出すことができます。
テーマでカスタムテンプレートファイルを作成するには、ファイルに適切な名前を付け、ヘッダー、サイドバー、フッターファイルと同じカスタムテンプレートシステムを使用してください。

slug-template.php

例えば、投稿コンテンツを扱うカスタムテンプレートを作成したい場合、content.phpというテンプレートファイルを作成し、ファイル名をcontent-product.phpにして、商品コンテンツ用の特定のコンテンツレイアウトを追加することができます。このテンプレートファイルをテーマで読み込むには、次のようにします。

get_template_part( 'content', 'product' );

テンプレートをより整理したい場合は、テーマディレクトリ内のそれぞれのディレクトリにテンプレートを配置することができます。例えば、プロフィールとロケーション用のコンテンツテンプレートを追加して、content-templatesと呼ばれる独自のディレクトリにグループ化したとします。

my-themeと呼ばれるテーマのテーマ階層は以下のようになります。
style.csspage.phpも含まれます。

コンテンツテンプレートを含めるには、次のようにスラッグ引数の前にディレクトリ名を指定します。

get_template_part( 'content-templates/content', 'location' );
get_template_part( 'content-templates/content', 'product' );
get_template_part( 'content-templates/content', 'profile' );

テーマのディレクトリにリンクする

テーマのディレクトリにリンクするには、次の関数を使用します。

子テーマを使用していない場合、この関数はテーマのメインフォルダへの完全なURIを返します。このように、テーマ内のサブフォルダやファイルを参照するために使うことができます。

echo get_theme_file_uri( 'images/logo.png' );

子テーマを使用している場合、この関数は子テーマにファイルが存在する場合、そのファイルのURIを返します。子テーマ内にファイルが見つからない場合、この関数は親テーマ内のファイルのURIを返します。
これは、テーマを配布するときや、子テーマがアクティブである場合とない場合がある場合に特に注意すべきことです。

テーマのディレクトリ内のファイルへのパスにアクセスするには、次の関数を使用します。

get_theme_file_uri() と同様に、子テーマにファイルが存在する場合はそのファイルのパスにアクセスします。子テーマにファイルが見つからない場合、この関数は親テーマのファイルのパスにアクセスします。

子テーマでは、以下の関数を使用して、親テーマのディレクトリ内のファイルのURIやパスにリンクすることができます。

get_theme_file_uri()と同様に、サブディレクトリを参照することができます。

echo get_parent_theme_file_uri( 'images/logo.png' );
//or
echo get_parent_theme_file_path( 'images/logo.png' );

これらの関数は、ファイルが存在するか否かに関わらず、URIまたはファイルパスを返すので、存在しない可能性のあるファイルを参照する際には注意が必要です。ファイルが存在しない場合、これらの関数はリンク切れを返します。

get_theme_file_uri(), get_theme_file_path(), get_parent_theme_file_uri(), get_parent_theme_file_path() 関数は WordPress 4.7 から導入されました。

それ以前のバージョンのWordPressでは、get_template_directory_uri(), get_template_directory(), get_stylesheet_directory_uri(), get_stylesheet_directory()を使用します。

4.7以降の関数は、チェック処理の一環として古い関数を実行するので、可能な限り新しい関数を使うのが理にかなっていることに注意してください。

テンプレートで直接リンクする

パーマリンクの設定に関わらず、ページや投稿のID (管理画面のいくつかのページで見られます) を表示したい場合は、以下のようにします。

<a href="<?php echo get_permalink($ID); ?>">This is a link</a>

これはページメニューを作成する際に便利な方法で、IDは変わらないので、後からリンクを切らずにページスラッグを変更することができます。しかし、これはデータベースのクエリを増やすかもしれません。