is_page_template()は何と比較しますか?


10

Wordpressのドキュメントを見るis_page_template()と、「テンプレート名」が提供されている場合は、それと比較されます。

page-homepage.php呼ばれるに保存されているテンプレートがありHomepageます:

/*
 * 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ないようです...?

私は何か間違ったことをしていますか?


ドキュメンテーションに関する良好な観察。
バージレ2016

回答:


15

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

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()(上記の例のように)関数の引数を指定する場合、ファイルパスはテーマルートからの相対パスです。

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


2
ここでどのパスが意味するのか説明しておくとよいでしょう。
バージレ2016

1
これが混乱を招く可能性がある理由に関する追加の説明と詳細を追加しました。
jdm2112 2016

3
ワオ。混乱のダブルワーミー。私はドキュメントが少しあいまいであることを理解できますが(実際には修正する必要があります)、get_page_template_slug()実際にはスラッグを返さないことに本当に驚いています!
Django Reinhardt

同意した。「名前を付ける」ことは、コードを書くときに最も難しいことの1つであるという概念をさらに支持することになります。
jdm2112 2016

この回答には、「ベストプラクティス」のソリューションが含まれています。ただし、ページが「デフォルトテンプレート」を使用している場合(ただし、実際にはページテンプレートです)、この回答は興味深いかもしれません。
rinogo

7

一番いいのは、FILE名をチェックすることです。あなたの場合は、page-homepage.phpになります。そう:

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

テンプレートファイルがテーマ内の別のフォルダーに実際に格納されている場合は、他に考えなければならないことがあります。 続きを読む

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


別の答えが指摘するように-それも考慮に入れます。page-templates/page-homepage.phpテーマルートのテンプレートとは異なります。
Howdy_McGee

面白くて知らなかったことですが、確認のために、ページテンプレートをテーマまたは子テーマのフォルダーの外に保存できますか?
マリサ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.