web-dev-qa-db-ja.com

投稿が「公開」されたときにフックはどのような順序で起動されますか?

誰かがリンクを指摘できれば私は感謝するでしょう。私はこれに非常に長い答えがあるかもしれないことを理解していますが、私は検索しましたが、リソースを見つけることができませんでした。

あるいは、誰かが単にフックが発射される順番を述べることができれば、それはまた素晴らしいでしょう。私は「公開された」投稿についてだけ心配しているので、多くの人がいないと確信しています。

前もって感謝します。

3
BAU

「出版」とはどういう意味ですか?

あなたが試すことができる一つのことはこれです:

http://planetozh.com/blog/my-projects/wordpress-hooks-filter-flow/

スクリプトはあなたのWordPressのルート(またはあなたが好めば/ wp-admin /)で実行され、あなたのブログにロードされているフィルタを列挙します。フックはアルファベット順に表示され、各フックについて、アクティブフィルタ(またはアクション、それらは同じ)が実行順に表示されます。実行順は、優先度またはロード順によって定義されます。このようなリストの目的は、プラグインのバグを見つけ出し、必要に応じてプラグインの優先順位を適切に微調整できるようにすることです。

編集:私はちょうどこのタスクのための1つの有望に見えるプラグインを見つけた: http://wordpress.org/extend/plugins/wordpress-hook-sniffer/

あるいは、/wp-includes/plugin.phpファイルを変更し、起動したすべてのフックをログファイルに記録することもできます。その後、投稿を「公開」して、どのフックが起動したのかを確認するだけです。

以下の変更を加えなければなりません。

// in apply_filters(..)
$log = array();
do {
    foreach( (array) current($wp_filter[$tag]) as $the_ )
        if ( !is_null($the_['function']) ){
            $args[1] = $value;
            $log[] = $the_;
            $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
        }
} while ( next($wp_filter[$tag]) !== false );
$filename = ABSPATH."/hooks.$tag.log"
file_put_contents($filename,file_get_contents($filename) ."\n". print_r($log,true));

// in apply_filters_ref_array(..)
$log = array();
do {
    foreach( (array) current($wp_filter[$tag]) as $the_ )
        $log[] = $the_;
        if ( !is_null($the_['function']) )
            $args[0] = call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));

} while ( next($wp_filter[$tag]) !== false );
$filename = ABSPATH."/hooks.$tag.log"
file_put_contents($filename,file_get_contents($filename) ."\n". print_r($log,true));


// in do_action(..)
$log = array();
do {
    foreach ( (array) current($wp_filter[$tag]) as $the_ )
        $log[] = $the_;
        if ( !is_null($the_['function']) )
            call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));

} while ( next($wp_filter[$tag]) !== false );
$filename = ABSPATH."/hooks.$tag.log"
file_put_contents($filename,file_get_contents($filename) ."\n". print_r($log,true));

// in do_action_ref_array(..)
$log = array();
do {
    foreach( (array) current($wp_filter[$tag]) as $the_ )
        $log[] = $the_;
        if ( !is_null($the_['function']) )
            call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));

} while ( next($wp_filter[$tag]) !== false );
$filename = ABSPATH."/hooks.$tag.log"
file_put_contents($filename,file_get_contents($filename) ."\n". print_r($log,true));
3
xaedes