it-swarm-ja.com

ジャストタイムアプローチに従ってファックを見つめる方法は?

自分の機能をアクションに結び付けるのにJust-In-Timeのアプローチに従うにはどうすればいいですか?私たちは、誰もがinitのような非常に早い段階に関数を追加するだけなので、最適化の範囲は残ります。 Wordcampのプレゼンテーションで、JITがある程度のパフォーマンスを発揮することを確認したところ、まったく同意していましたが、最後にフックできるのはどのようにして見つけるのですか。

WPコードの実行フローを理解するのに役立つものはありますか?

1
Ashfame

似たような質問に対するマイクの答え を参照してください。具体的には彼が投稿したプラグインを使用して、実行されたすべてのアクションフックとフィルタのリストを作成できます。実行順にそのページを生成するために呼び出されます。

お役に立てれば

2
Bainternet

多くの場合、人々はinitフックを使います。しかし、これは条件付き実行の多くの場合にとって間違いとなる可能性があります。たとえば、initの時点では、ビュータイプ( 'home'、 'single'、 'page'、 'archive'など)はまだわかっていません。 is_page()などに基づいて条件付きで関数を呼び出す必要がある場合は、template_redirectのように後で実行するフックを使用する必要があります。

同様に、管理者側のイベントでは、admin_menuよりもadmin_initフックを使用する方が通常は良いです。

@Bainternetが指しているQ/Aのリソースは非常に役に立ちますので、必ずそれらを見てください。しかし、知っておくと便利なことがいくつかあることを指摘したいと思いました。

1
Dougal Campbell

私自身も違うものを使っていますが、このスニペットで私のフック "なりすまし"を1日進めることができました。

function list_hooks( $filter = false ){
    global $wp_filter;

    $hooks = $wp_filter;
    ksort( $hooks );

    foreach( $hooks as $tag => $hook )
        if ( false === $filter || false !== strpos( $tag, $filter ) )
            dump_hook($tag, $hook);
}

function list_live_hooks( $hook = false ) {
    if ( false === $hook )
        $hook = 'all';

    add_action( $hook, 'list_hook_details', -1 );
}

function list_hook_details( $input = NULL ) {
    global $wp_filter;

    $tag = current_filter();
    if( isset( $wp_filter[$tag] ) )
        dump_hook( $tag, $wp_filter[$tag] );

    return $input;
}

function dump_hook( $tag, $hook ) {
    ksort($hook);

    echo "<pre>&gt;&gt;&gt;&gt;&gt;\t<strong>$tag</strong><br />";

    foreach( $hook as $priority => $functions ) {

    echo $priority;

    foreach( $functions as $function )
        if( $function['function'] != 'list_hook_details' ) {

        echo "\t";

        if( is_string( $function['function'] ) )
            echo $function['function'];

        elseif( is_string( $function['function'][0] ) )
             echo $function['function'][0] . ' -> ' . $function['function'][1];

        elseif( is_object( $function['function'][0] ) )
            echo "(object) " . get_class( $function['function'][0] ) . ' -> ' . $function['function'][1];

        else
            print_r($function);

        echo ' (' . $function['accepted_args'] . ') <br />';
        }
    }

    echo '</pre>';
}

誰かがこれを書いた場合、plsは自分自身を作者として名前を付けます(orig。sourceへのリンク付き)。リンクを安全にするのを忘れていました


編集:このページ @ Codex もご覧ください。そこにあなたは順序が引き起こされる順序を見ることができます。
あなたに出発点を与えるべきです:/root/index.php > wp-blog-header.php > wp-load.php > wp-config.php > wp-settings.php > \wp-includes\load.php > \wp-includes\default-constants.php > ...最も良いのはどこかから何らかのデバッグクラスをつかみ、ただインクルードローカルをチェックすることでしょう。

1
kaiser