J'ai une question concernant WordPress, en particulier la version 3.0 et plus récente.
Quelqu'un sait-il comment obtenir un tableau ou une liste de toutes les fonctions qui seront appliquées ou qui sont "enregistrées" dans le filtre_contenu?
L'idée est de générer une liste de cases à cocher des fonctions possibles à supprimer du filtre, telles que wpautop. Je sais comment supprimer des fonctions du filtre avec des étiquettes codées en dur, mais j'espère créer une solution plus dynamique.
Si quelqu'un a des idées si cela est possible et comment cela pourrait être fait, je serais très intéressé. Merci.
Fonction simple pour imprimer à partir du tableau de filtres?
function print_filters_for( $hook = '' ) {
global $wp_filter;
if( empty( $hook ) || !isset( $wp_filter[$hook] ) )
return;
print '<pre>';
print_r( $wp_filter[$hook] );
print '</pre>';
}
Appelez-le là où vous en avez besoin.
print_filters_for( 'the_content' );
Ceci est un exemple un peu plus avancé qui, en plus des données du tableau $wp_filter
, Montrera le chemin du fichier auquel le crochet est attaché, ainsi que la ligne de code où la fonction est définie.
Pour obtenir une liste de base des fonctions accrochées à une action (ou un filtre) spécifique, il suffit de récupérer les éléments du tableau de filtres, mais comme les fonctions peuvent être attachées de différentes manières (comme méthode de classe ou fermeture), cette liste contiendra une tonne de données non pertinentes qui comprend des objets présentés sous forme de chaîne. Cet exemple n'affichera que les données pertinentes, par ordre de priorité:
'function_name'
array( $object, 'function_name' )
array( 'class_name', 'function_name' )
et 'class_name::function_name'
function() {}
array( 'class_name', 'parent::function_name' )
function list_hooks( $hook = '' ) {
global $wp_filter;
if ( isset( $wp_filter[$hook]->callbacks ) ) {
array_walk( $wp_filter[$hook]->callbacks, function( $callbacks, $priority ) use ( &$hooks ) {
foreach ( $callbacks as $id => $callback )
$hooks[] = array_merge( [ 'id' => $id, 'priority' => $priority ], $callback );
});
} else {
return [];
}
foreach( $hooks as &$item ) {
// skip if callback does not exist
if ( !is_callable( $item['function'] ) ) continue;
// function name as string or static class method eg. 'Foo::Bar'
if ( is_string( $item['function'] ) ) {
$ref = strpos( $item['function'], '::' ) ? new ReflectionClass( strstr( $item['function'], '::', true ) ) : new ReflectionFunction( $item['function'] );
$item['file'] = $ref->getFileName();
$item['line'] = get_class( $ref ) == 'ReflectionFunction'
? $ref->getStartLine()
: $ref->getMethod( substr( $item['function'], strpos( $item['function'], '::' ) + 2 ) )->getStartLine();
// array( object, method ), array( string object, method ), array( string object, string 'parent::method' )
} elseif ( is_array( $item['function'] ) ) {
$ref = new ReflectionClass( $item['function'][0] );
// $item['function'][0] is a reference to existing object
$item['function'] = array(
is_object( $item['function'][0] ) ? get_class( $item['function'][0] ) : $item['function'][0],
$item['function'][1]
);
$item['file'] = $ref->getFileName();
$item['line'] = strpos( $item['function'][1], '::' )
? $ref->getParentClass()->getMethod( substr( $item['function'][1], strpos( $item['function'][1], '::' ) + 2 ) )->getStartLine()
: $ref->getMethod( $item['function'][1] )->getStartLine();
// closures
} elseif ( is_callable( $item['function'] ) ) {
$ref = new ReflectionFunction( $item['function'] );
$item['function'] = get_class( $item['function'] );
$item['file'] = $ref->getFileName();
$item['line'] = $ref->getStartLine();
}
}
return $hooks;
}
Étant donné que des hooks peuvent être ajoutés et supprimés tout au long de l'exécution, la sortie dépend du moment où la fonction est appelée (l'action wp_footer
Est un bon endroit pour obtenir la liste complète)
Exemple print_r
Pour le filtre the_content
:
Array
(
[0] => Array
(
[id] => 000000004c8a4a660000000011808a14run_shortcode
[priority] => 8
[function] => Array
(
[0] => WP_Embed
[1] => run_shortcode
)
[accepted_args] => 1
[file] => C:\xampp\htdocs\wordpress\wp-includes\class-wp-embed.php
[line] => 58
)
[1] => Array
(
[id] => wptexturize
[priority] => 10
[function] => wptexturize
[accepted_args] => 1
[file] => C:\xampp\htdocs\wordpress\wp-includes\formatting.php
[line] => 41
)
[2] => Array
(
[id] => 0000000006c5dc6d0000000064b1bc8e
[priority] => 10
[function] => Closure
[accepted_args] => 1
[file] => C:\xampp\htdocs\wordpress\wp-content\plugins\plugin\plugin.php
[line] => 16
)
.....
Modifier: 2017-05-05
WP_Hook