Wordpressのドキュメント を見ると、is_page_template()
は "テンプレート名"があればそれと比較します。
Homepage
というpage-homepage.php
に保存されたテンプレートがあります。
/*
* Template Name: Homepage
* Description: The template for displaying the homepage
*/
そのテンプレートを使っているときは、functions.phpで実行したいコードがいくつかあります。
if (is_page_template('Homepage')) {
...
しかし、そのテンプレートを使用しているページを開いているときにはトリガーされません。
Wordpressがis_page_template()
に対して実行するコードを見ると、実際にはテンプレート名ではなく文書名がチェックされているようです…?
function is_page_template( $template = '' ) {
$page_template = get_page_template_slug( get_queried_object_id() );
if ( $template == $page_template )
return true;
私の例では、$page_template
はpage-homepage.php
であるようです - ドキュメントが示唆するように、テンプレート名ではありません...?
私は何か悪いことをしていますか?
あなたの状態はこのように書かれるべきです:
if (is_page_template('path/file.php')) {
// Do stuff
}
私は混乱が2つのことの結果であると信じます:
is_page_template()
の背後にあるコードは、その中心となるget_page_template_slug()
関数を示しています。この関数は実際にはテンプレートのスラッグではなくファイル名を返します。 https://codex.wordpress.org/Function_Reference/get_page_template_slug(上の例のように)is_page_template()
関数の引数を指定するとき、ファイルパスはテーマルートからの相対パスです。
この関数はループ内では機能しません。
私が言うべき最もよいことはそれがファイル名をチェックし、あなたの場合それはpage-homepage.phpであろうということです。そう:
if (is_page_template('page-homepage.php')) {
...
他に考慮すべきことは、テンプレートファイルが実際にはテーマ内の別のフォルダに格納されているかどうかです。 続きを読む
もう1つ、Template Name: Homepage
は一般的にページや投稿を作成するときにテンプレートを識別するために使用されるものです。