web-dev-qa-db-ja.com

Is_page_template()と何が比較されますか?

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_templatepage-homepage.phpであるようです - ドキュメントが示唆するように、テンプレート名ではありません...?

私は何か悪いことをしていますか?

10

あなたの状態はこのように書かれるべきです:

if (is_page_template('path/file.php')) { 
    // Do stuff
}

私は混乱が2つのことの結果であると信じます:

  1. ドキュメントは "名前"をあいまいに参照しています。 "ファイル名"を指定すると、ドキュメントがより明確になります。
  2. is_page_template()の背後にあるコードは、その中心となるget_page_template_slug()関数を示しています。この関数は実際にはテンプレートのスラッグではなくファイル名を返します。 https://codex.wordpress.org/Function_Reference/get_page_template_slug

(上の例のように)is_page_template()関数の引数を指定するとき、ファイルパスはテーマルートからの相対パスです。

この関数はループ内では機能しません。

14
jdm2112

私が言うべき最もよいことはそれがファイル名をチェックし、あなたの場合それはpage-homepage.phpであろうということです。そう:

if (is_page_template('page-homepage.php')) { 
  ...

他に考慮すべきことは、テンプレートファイルが実際にはテーマ内の別のフォルダに格納されているかどうかです。 続きを読む

もう1つ、Template Name: Homepageは一般的にページや投稿を作成するときにテンプレートを識別するために使用されるものです。

6
Malisa