web-dev-qa-db-ja.com

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

あなたがワードプレスのテーマをアクティブにするとき、物事を変えるために行くべきファイルを見つけるのはいつも面倒です。どのように物事を単純化するためのアイデアですか?

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

52
Average Joe

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

現在のテンプレートファイルの名前を取得する しかし、 そのコードのコピーを入手して それをあなたのテーマのfunctions.phpファイルに入れてください。

次に、テーマのheader.phpまたはfooter.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() ); 
?>

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

34
t31os

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

Debug Bar という便利なプラグインがあります。 それはあなたを含む多くの状況で素晴らしい助っ人です。あなたは間違いなくそれをチェックアウトするべきです - 私と他の多くの人にとってそれはどんなWP開発のためになくてはならない仲間です。

恋に落ちる可能性のあるスクリーンショットを添付しました...

enter image description here

デバッグバー working を取得するには、wp_debugおよびwp_savequeriesオプションを有効にする必要があります。これらのオプションはデフォルトで無効になっています。

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

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

変更するには:

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

より多くの情報: コーデックス

37
Michal Mau

私は現在のテンプレートをスーパー管理者だけに表示する便利な機能を使います。

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

それが役立つことを願っています。 :)

21
mightypixel

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

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

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

<!-- page.php -->
12
ronald

この目的のためには、もう少し素のプラグインがあります。これらの他の機能は便利に見えるので、私はデバッグバーのインストールに傾いていますが、これはより基本的で具体的にはこの目的のためです: http://wordpress.org/extend/plugins/what-the-file/

4
Julian K

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

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

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

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

4
CookiesForDevo

ここに行く:

all現在のランディングページで使用中のテンプレートファイル、プラグイン、子テーマ、および/または親テーマの組み合わせからのすべてのテンプレート部分を含むを含む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>';

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

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

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

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

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

これを分割するには:

できない PHPバックトレースなしで、含まれているすべてのテンプレートファイルを収集します。 Superglobals inside 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);

結果を短くします。テーマフォルダーまたはプラグインフォルダーまでのパスは不要です。テンプレートとして使用中、混合可能プラグインから、テーマまたは子テーマのフォルダー。

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

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

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

最後の変更が必要になる場合がありますin part3)-replacementdont wantプラグインによるincludesが必要です。 class-filesを遅く呼び出し、テンプレート出力処理中に「インターセプト」する場合があります。

ただし、アイデアはレンダリングされた「テンプレート」ではなくても、ロードされたものを追跡することですため、それらを表示したままにするのが合理的であることがわかりましたこの段階で出力します。

3
Jonas Lundman

テンプレートファイルを識別するHTMLコメントをテーマの各関連ファイルに挿入することが非常に簡単です。たとえば、index.phpの一番上にあります。

<!-- index -->

そしてfront-page.phpの一番上に

<!-- front -->

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

3
David R

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

3
navjotjsingh