2

PHP の基本的な知識とインターネットに関するいくつかのスマートなスニップに基づいて、WP 子テーマ開発用のデバッグ ルーチンをまとめました。これは、レンダリングされた WP ページを構成するスープに何が入っているかを理解するのが難しい場合が多いということです。

そこで、Rarst で次の関数を追加しました。

/**
 * Function to list all templates used in a page
 * @author Rarst
 * @uri http://wordpress.stackexchange.com/a/89005
 */

function thelist() {
    $included_files = get_included_files();
    $stylesheet_dir = str_replace( '\\', '/', get_stylesheet_directory() );
    $template_dir   = str_replace( '\\', '/', get_template_directory() );

    foreach ( $included_files as $key => $path ) {

        $path   = str_replace( '\\', '/', $path );

        if ( false === strpos( $path, $stylesheet_dir ) && false === strpos( $path, $template_dir ) )
            unset( $included_files[$key] );

        echo $key." = ". $path."</br>";
    }
}

便利です、はい、間違いなく。これを関数でラップし、WP フッターの直前のフッターで呼び出しました (何百ものプラグイン ファイル参照を避けるため)。それをすべてCSSサンドイッチに入れてから、ディスプレイをラップします...

<?php if (current_user_can('manage_options')) { ?>
    <div class="debug">
        <?php thelist(); ?>
    </div>
<?php } ?>

そして今、私たちはどこかに到達しています。残念ながら、私はどこかに「おい、必要なファイルは常にページの約 3 マイル下にあります」ということになりますが、関数の出力をフィルタリングすることは、私が非常に不満を感じるものです。だから私はここに来て、それがどのように行われたか、そしてその理由を学び、その知恵を前進させます.

ランダムなクライアント サイトからの出力例:

0 = /path/to/file/index.php
1 = /path/to/file/wp-blog-header.php
2 = /path/to/file/wp-load.php
3 = /path/to/file/wp-config.php
4 = /path/to/file/wp-settings.php
5 = /path/to/file/wp-includes/load.php
6 = /path/to/file/wp-includes/default-constants.php
7 = /path/to/file/wp-includes/version.php
8 = /path/to/file/wp-includes/compat.php
9 = /path/to/file/wp-includes/functions.php
10 = /path/to/file/wp-includes/option.php
[...]
219 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/page_link.php
220 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/post_object.php
221 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/relationship.php
222 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/taxonomy.php
223 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/user.php
224 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/date_picker/date_picker.php
225 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/color_picker.php
226 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/message.php
227 = /path/to/file/wp-content/plugins/advanced-custom-fields/core/fields/tab.php
228 = /path/to/file/wp-content/plugins/add-to-any/add-to-any-wp-widget.php
229 = /path/to/file/wp-includes/class-wp-admin-bar.php
230 = /path/to/file/wp-includes/template-loader.php
231 = /path/to/file/wp-content/themes/themename/category.php
232 = /path/to/file/wp-content/themes/themename/header.php
233 = /path/to/file/wp-content/themes/themename/content.php
234 = /path/to/file/wp-content/themes/themename/sidebar.php
235 = /path/to/file/wp-content/themes/themename/footer.php

したがって、基本的には、235 行の出力のうち最後の 5 行が必要です。より具体的には、パスに /wp-content/themes/ を含むものを除外して、それのみを表示する必要があります。

唯一の問題は、私がまだ構文とクラス ファイルについて学んでいることです。私はまだ Regex とフィルタリングについて詳しくは説明していませんが、このリストがもう少し機能的であってほしいと思っています。最終的には、フィルター処理されたパスを構成ファイルに貼り付けたいと思いますが、それを理解することで SO に負担をかけるつもりはありません (そのため、jQuery と CSS を使用するように PHP を学習しています)。

ただし、基本的なテーマ フィルターについてはあなたの助けが必要です。

更新: HamZa DzCyber​​DeV はそれを釘付けにしました

if(!strpos($path, '/wp-content/themes/') === false) {
    echo $key." = ". $path."</br>";
}
4

1 に答える 1

3

したがって、コメントに記載されているように、次のことができます。

if(!strpos($path, '/wp-content/themes/') === false) {
    echo $key." = ". $path."</br>";
}

学習目的で正規表現を使用する場合:

if(!preg_match('#/wp-content/themes/#i', $path) === false) {
    echo $key." = ". $path."</br>";
}

i 修飾子: 大文字と小文字を区別しません。

オンラインデモ

正規表現難しい方法を学びます。

于 2013-05-23T21:15:55.267 に答える