どのテンプレートページが現在のページを提供しているかをどのように確認しますか?


54

ワードプレスのテーマをアクティブにすると、変更するファイルを見つけるのが常に面倒です。物事を単純化する方法はありますか?

しかし一方で、get_template_part機能を考慮すると、これは不可能かもしれません。あなたは何を言っていますか?


1
htmlを調べて、識別されたタグまたはユニークなものを見つけます。
ノアジーゴールデン

1
ソースコードを表示し、使用されているテンプレートを示すボディクラスを探します。また、あなたにIDを与えます
ブラッド・ダルトン14


@BradDalton +1。特に目標を達成するためにプラグインのインストールや関数の作成が許可されていない場合。
ブラタサルカール

回答:


34

にフックしtemplate_include、グローバルを設定してテーマで設定されたテンプレートをメモし、その値をフッターまたはヘッダーに読み込んで、特定のビューでどのテンプレートが呼び出されているかを確認します。

で前に私は、このフィルターフックについて話した現在のテンプレートファイルの名前を取得しますが、つかむ行くそのコードのコピーをし、それをあなたのテーマのplonk functions.phpファイルを。

次に開くテーマのheader.phpfooter.php(あるいはあなたが好きな場所)と現在のテンプレートをプリントアウトするには、以下のようなものを使用。

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

これを実稼働サイトで使用し、その情報を非管理者ユーザーから遠ざけたい場合は、少し条件付きロジックを追加します。

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

これで、どのビューがどのテンプレートを使用しているかを追跡し、その情報を訪問者から遠ざけることができます。


1
この回答に何か問題がある場合、またはこの回答を改善するために何ができるかについて誰かがコメントを提供できる場合は、ここにコメントを残し、改善する方法についての考えやアイデアを共有してください。
t31os 14年

1
それは仲間とは機能しなかった、「未定義の機能」と言う
ルーカスブスタマンテ

1
@LucasBここでも同じ、それは私が得たエラーです
リンカーンベルジェソン


40

必要なのは、現在のページを生成するためにどのテンプレートファイルが使用されているかを確認することだけであれば、コードで手を汚す必要はありません;)

Debug Barと呼ばれるこの便利なプラグインがあります。 それはあなたを含む多くの状況で素晴らしいヘルパーです。あなたは間違いなくそれをチェックアウトする必要があります-私と他の多くの人にとって、それはどんなWP開発にとっても必携の仲間です。

私はあなたが恋に落ちることができるスクリーンショットを添付しました...

ここに画像の説明を入力してください

デバッグバーを機能させるにはwp_debugwp_savequeriesオプションとオプションを有効にする必要があります。これらのオプションはデフォルトで無効状態になっています。

ただし、変更を行う前に、留意すべき点がいくつかあります。

  • Webサイトが大量のトラフィックに対応していない場合を除き、実稼働環境では実行しないでください。
  • デバッグが終了したら、Webサイトのオプション(特にパフォーマンスに影響するためwp_savequeriesオプション)を必ず無効にしてください。

変更するには:

  1. wp_config.phpFTPクライアントを介してファイルを開きます。
  2. wp_debugオプションを検索します。に編集しdefine( 'WP_DEBUG', true );ます。行が存在しない場合は、ファイルに追加します。
  3. 同様define( 'SAVEQUERIES', true );に、ファイルの行を編集または追加します。
  4. セーブ。デバッグする準備ができました。

詳細:コーデックス


2
@justCallMeBiru -デバッグバープラグインがありません必要 WP_DEBUGSAVEQUERIESそれがされているが、強化され、それらによって。
パットJ 14年

3
そのようなプラグインを実行すると、ほんの少しの情報だけで多くのオーバーヘッドが生じます。そのため、自分の答えでは提案しませんでした。とはいえ、明らかに人々はこの答えを好むのですが、なぜだか知りたいです。
t31os 14年

23

スーパー管理者のみに現在のテンプレートを表示するこの便利な機能を使用します。

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

お役に立てば幸いです。:)


2
これはgotoの答えであり、受け入れられるべきです。
ハイブリッドWeb開発

12

関連する各テンプレートファイルのget_header行の直後に次のコードを追加します。

<!-- <?php echo basename( __FILE__ ); ?> -->

ブラウザで>ソースを表示すると、テンプレート名がHTMLコードのコメントとして表示されます。

<!-- page.php -->

これをどこにでも追加するのは大変です
アダル

4

私が見つけた最も簡単な方法は、bodyPressにWordPress機能を含めることです。表示しているページに応じて、いくつかのクラスを追加します(フロントのホーム、ページのページなど)。

ここでチェックしてください:http : //codex.wordpress.org/Function_Reference/body_class

さらに、これらのページでCSSを使用して要素をターゲティングするのに役立ちます。

David Rが言及したように、テンプレート階層(http://codex.wordpress.org/Template_Hierarchy)を知ることも良い考えです。



3

私が行う非常に簡単なことの1つは、テーマの関連する各ファイルにテンプレートファイルを識別するHTMLコメントを挿入することです。たとえば、index.phpの先頭に

<!-- index -->

そして、front-page.phpの上部

<!-- front -->

しかし明らかにテーマを変更する必要があります。footer.phpファイルまたはheader.phpにカスタム関数を追加すると、どのファイルが使用されているかがわかります。上記の方法と参照チャートhttp://codex.wordpress.org/Template_Hierarchyは、私が使用する傾向があるものです。


3

まさにこれを行うTheme Checkという名前のプラグインがあります。使用中の現在のテンプレートファイルの名前をHTMLコメントとして表示します。


3

どうぞ:

プラグイン、子テーマ、および/または親テーマの組み合わせからのすべてのテンプレート部分を含む、現在のランディングページで使用中のすべてのテンプレートファイルを含む HTMLリストは、すべて1行のコードで:

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';

サーバーがどのパスでもダブルスラッシュを返さないことを確認する必要があります。footer.phpのように、すべてのテンプレートファイルが実際に使用された後、管理バーがレンダリングされる前にこれを配置することを忘れないでください。

admin-bar stuffパスが上部または他のファイルに表示されている場合template-loader.php、このコード行のファイル名を次のように変更します。しばしば:class-wp-admin-bar.php

管理バーでこれが必要な場合は、正しい優先順位(最も早い)使用して、このリストの最後ファイルが入力されないようにします。例えば:

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

優先順位は-5、shureを最初にロードします。重要なのはget_included_files()、適切なタイミングで呼び出すことです。それ以外の場合は、配列ポップが必要です。

これを分割するには:

PHPバックトレースなしで、含まれているすべてのテンプレートファイルを収集することはできません。内部のスーパーグローバルはtemplate_include それらをすべて収集しません。もう1つの方法は、各テンプレートファイルに「マーカーを配置する」ことですが、最初にファイルとやり取りする必要がある場合は、時間とアイデア全体に夢中になります。

1)現在のWordpressリクエストで使用されたすべてのファイルの内部を確認する必要があります。そして、彼らはたくさんです!functions.phpが登録される前に300ファイルを使用している場合でも驚かないでください。

$included_files = str_replace('\\', '/', get_included_files());

PHPネイティブのget_included_files()を使用して、バックスラッシュをスラッシュに変換し、Wordpressのほとんどの戻りパスに一致させます。

2) template-loader.phpが登録されている場所からその配列を切り取っています。その後、読み込まれたget_included_files()にはテンプレートファイルのみが読み込まれます。

/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3)結果を短くします。使用中のテンプレートとして、テーマフォルダーまたはプラグインフォルダーをプラグイン、テーマ、または子テーマフォルダーから混合できるようになるまで、パスは必要ありません

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4)最後に、配列から素敵なHTMLリストに変換します

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

最後の変更が必要になる可能性があるその3で) -replacement、あなたがあればいけないしたい必要が含まれるプラグインによって。彼らはclass-files遅れて呼び出し、テンプレート出力処理中に「インターセプト」するかもしれません。

ただし、この段階で出力をレンダリングする「テンプレート」でなくても、ロードさたものを追跡するという考え方なのでそれらを表示したままにしておくのが妥当であることがわかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.