Как я могу узнать, что на самом деле делает вызов `apply_filter`?

Например, я смотрю на class-wp-xmlrpc-server.php и есть строка (~ 115), которая гласит:

 $this->methods = apply_filters('xmlrpc_methods', $this->methods); 

Как я могу узнать, какие преобразования выполняются по данным фильтром? Очевидно, что я могу сравнить $this->methods до и после применения фильтра для получения отличий в нижней строке, но я хотел бы знать, какой код действительно выполняется для внесения этих изменений.

Есть идеи?

Вот фрагмент, похожий на вышеописанный, который выдает зацепившиеся функции для всех (или указанных) крючков при каждом вызове. Преимущество заключается в том, что это будет захватывать (не все) «динамически» добавленные крючки. В частности, он отображает только функции, которые в настоящее время подключены к этому крюку во время вызова. (Иногда функция будет удалена или добавлена ​​в крючок для конкретного экземпляра). С другой стороны, это требует вызова крюка.

Фрагмент работает для действий и фильтров (они, по сути, одно и то же), но, как и выше, вы можете указать только приоритет, имя и количество аргументов. Чтобы узнать, что делают сами функции, вам придется их найти …

Использование: вход в систему как пользователь admin. Посетите любую страницу, спереди или сзади, с параметрами GET заданными как debug=secret и (необязательно) hook=hook_name .

Этот фрагмент предназначен только для разработки .

 if( current_user_can('administrator') && !empty($_GET[ 'debug' ]) && 'secret' == $_GET[ 'debug' ] ){ global $sh_fired_filters; $sh_fired_filters = array(); add_action('all','store_fired_filters'); add_action( 'shutdown' , 'display_fired_filters' ); } function store_fired_filters($tag){ if(!empty($_GET[ 'hook' ]) && $_GET[ 'hook' ]!= $tag) return; global $wp_filter; global $sh_fired_filters; if( ! isset($wp_filter[$tag])) return; $hooked = $wp_filter[$tag]; ksort($hooked); foreach ($hooked as $priority => $function): $hooked[] = $function; endforeach; $sh_fired_filters[] = array('tag'=>$tag, 'hooked' => $wp_filter[$tag]); } function display_fired_filters(){ global $sh_fired_filters; global $wp_filter; foreach($sh_fired_filters as $index=> $the_): echo "<h1>".$index.' '.$the_['tag']."</h1>"; echo "<ul>"; foreach($the_['hooked'] as $priority => $hooked): foreach($hooked as $id => $function): echo '<li>'.$priority.' <strong>'.print_r($function['function'],true).'</strong> (accepted args:'.$function['accepted_args'].')</li>'; endforeach; endforeach; echo "</ul>"; endforeach; } 

Это отобразит только крючки, которые были запущены в ходе загрузки страницы.

Взаимодействуя с глобальным $wp_filter , вы можете увидеть все фильтры, которые настроены в любой момент времени. Чтобы сэкономить вам немного времени, наш собственный @Rarst написал код, который сделает это за вас, вы можете найти его здесь . Убедитесь, что вы выполнили это после добавления фильтров, чтобы вы не потеряли ничего важного.