Cum poți afla ce funcții sunt atașate la o acțiune/filtru?
16 mai 2011, 17:16:20
Vizualizări: 43.4K
Voturi: 40
Comentarii
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare
5
0
Uită-te la variabila globală $wp_filter
. Vezi pluginul meu pentru o listă cu toate filtrele de comentarii ca exemplu:
<?php
/*
Plugin Name: Lista Filtrelor de Comentarii
Description: Listează toate filtrele de comentarii pe wp_footer
Version: 1.1
Author: Fuxia Scholz
License: GPL v2
*/
add_action( 'wp_footer', 'list_comment_filters' );
function list_comment_filters()
{
global $wp_filter;
$comment_filters = array ();
$h1 = '<h1>Filtrele Curent de Comentarii</h1>';
$out = '';
$toc = '<ul>';
foreach ( $wp_filter as $key => $val )
{
if ( FALSE !== strpos( $key, 'comment' ) )
{
$comment_filters[$key][] = var_export( $val, TRUE );
}
}
foreach ( $comment_filters as $name => $arr_vals )
{
$out .= "<h2 id=$name>$name</h2><pre>" . implode( "\n\n", $arr_vals ) . '</pre>';
$toc .= "<li><a href='#$name'>$name</a></li>";
}
print "$h1$toc</ul>$out";
}
Exemplu de ieșire pentru pre_comment_author_email
:
array (
10 =>
array (
'trim' =>
array (
'function' => 'trim',
'accepted_args' => 1,
),
'sanitize_email' =>
array (
'function' => 'sanitize_email',
'accepted_args' => 1,
),
'wp_filter_kses' =>
array (
'function' => 'wp_filter_kses',
'accepted_args' => 1,
),
),
)

fuxia
107K
16 mai 2011 17:22:27
0
Aceasta afișează o listă mai lizibilă de filtre
function print_filters_for( $hook = '' ) {
global $wp_filter;
if( empty( $hook ) || !isset( $wp_filter[$hook] ) ) return;
$ret='';
foreach($wp_filter[$hook] as $priority => $realhook){
foreach($realhook as $hook_k => $hook_v){
$hook_echo=(is_array($hook_v['function'])?get_class($hook_v['function'][0]).':'.$hook_v['function'][1]:$hook_v['function']);
$ret.= "\n$priority $hook_echo";
}
}
return $ret;
}

Simone G
61
15 apr. 2016 04:28:55
0
Am găsit răspunsul de la @Simone G util, dar nu a luat în considerare faptul că uneori Closures pot fi încărcate (hooked). Iată versiunea mea mai detaliată (și mai puțin elegantă):
if( isset($wp_filter[$filterName]) ){
foreach( $wp_filter[$filterName] as $priority => $hooks){
foreach ($hooks as $hook_k => $hook_v) {
$hook_echo=(is_array($hook_v['function'])?get_class($hook_v['function'][0]).':'.$hook_v['function'][1]:$hook_v['function']);
if(is_object($hook_echo) && ($hook_echo instanceof Closure)){
$hook_echo="closure";
}
error_log($filterName." HOOKED (".serialize($priority)."): ".serialize($hook_k)."".serialize($hook_echo));
}
}
} else {
error_log($filterName." NO FILTERS HOOKED");
}

Derwent
101
21 feb. 2017 05:38:43
Întrebări similare
6
răspunsuri
1
răspunsuri