Il n'y a aucun script ou plugin à ma connaissance pour faire ce que vous voulez. Comme vous l'avez indiqué, il existe des scripts ( même des variables globales ) que vous pouvez utiliser pour imprimer des filtres et des actions actuellement utilisés.
En ce qui concerne les filtres et les actions dormants, j'ai écrit deux fonctions très basiques ( avec une aide ici et là ) qui trouvent tout apply_filters
et les do_action
instances dans un fichier puis l'imprime
LES BASES
Nous utiliserons les RecursiveDirectoryIterator
, RecursiveIteratorIterator
et les RegexIterator
classes PHP pour obtenir tous les fichiers PHP dans un répertoire. Par exemple, sur mon hôte local, j'ai utiliséE:\xammp\htdocs\wordpress\wp-includes
Nous allons ensuite parcourir les fichiers et rechercher et retourner ( preg_match_all
) toutes les instances de apply_filters
et do_action
. Je l'ai configuré pour correspondre aux instances imbriquées de parenthèses et également pour faire correspondre les espaces blancs possibles entre apply_filters
/ do_action
et la première parenthèse
Nous allons simplement créer un tableau avec tous les filtres et actions, puis parcourir le tableau et afficher le nom de fichier et les filtres et actions. Nous ignorerons les fichiers sans filtres / actions
NOTES IMPORTANTES
Ces fonctions sont très chères. Exécutez-les uniquement sur une installation de test locale.
Modifiez les fonctions selon vos besoins. Vous pouvez décider d'écrire la sortie dans un fichier, créer une page spéciale pour cela, les options sont illimitées
OPTION 1
La première fonction d'options est très simple, nous retournerons le contenu d'un fichier sous forme de chaîne en utilisant file_get_contents
, rechercherons les instances apply_filters
/ do_action
et sortirons simplement le nom de fichier et les noms de filtre / action
J'ai commenté le code pour un suivi facile
function get_all_filters_and_actions( $path = '' )
{
//Check if we have a path, if not, return false
if ( !$path )
return false;
// Validate and sanitize path
$path = filter_var( $path, FILTER_SANITIZE_URL );
/**
* If valiadtion fails, return false
*
* You can add an error message of something here to tell
* the user that the URL validation failed
*/
if ( !$path )
return false;
// Get each php file from the directory or URL
$dir = new RecursiveDirectoryIterator( $path );
$flat = new RecursiveIteratorIterator( $dir );
$files = new RegexIterator( $flat, '/\.php$/i' );
if ( $files ) {
$output = '';
foreach($files as $name=>$file) {
/**
* Match and return all instances of apply_filters(**) or do_action(**)
* The regex will match the following
* - Any depth of nesting of parentheses, so apply_filters( 'filter_name', parameter( 1,2 ) ) will be matched
* - Whitespaces that might exist between apply_filters or do_action and the first parentheses
*/
// Use file_get_contents to get contents of the php file
$get_file_content = file_get_contents( $file );
// Use htmlspecialchars() to avoid HTML in filters from rendering in page
$save_content = htmlspecialchars( $get_file_content );
preg_match_all( '/(apply_filters|do_action)\s*(\([^()]*(?:(?-1)[^()]*)*+\))/', $save_content, $matches );
// Build an array to hold the file name as key and apply_filters/do_action values as value
if ( $matches[0] )
$array[$name] = $matches[0];
}
foreach ( $array as $file_name=>$value ) {
$output .= '<ul>';
$output .= '<strong>File Path: ' . $file_name .'</strong></br>';
$output .= 'The following filters and/or actions are available';
foreach ( $value as $k=>$v ) {
$output .= '<li>' . $v . '</li>';
}
$output .= '</ul>';
}
return $output;
}
return false;
}
Vous pouvez utiliser au suivi sur un modèle, frontend ou backend
echo get_all_filters_and_actions( 'E:\xammp\htdocs\wordpress\wp-includes' );
Cela imprimera
OPTION 2
Cette option est un peu plus coûteuse à exécuter. Cette fonction renvoie le numéro de ligne où le filtre / l'action peut être trouvé.
Ici, nous utilisons file
pour exploser le fichier dans un tableau, puis nous recherchons et renvoyons le filtre / l'action et le numéro de ligne
function get_all_filters_and_actions2( $path = '' )
{
//Check if we have a path, if not, return false
if ( !$path )
return false;
// Validate and sanitize path
$path = filter_var( $path, FILTER_SANITIZE_URL );
/**
* If valiadtion fails, return false
*
* You can add an error message of something here to tell
* the user that the URL validation failed
*/
if ( !$path )
return false;
// Get each php file from the directory or URL
$dir = new RecursiveDirectoryIterator( $path );
$flat = new RecursiveIteratorIterator( $dir );
$files = new RegexIterator( $flat, '/\.php$/i' );
if ( $files ) {
$output = '';
$array = [];
foreach($files as $name=>$file) {
/**
* Match and return all instances of apply_filters(**) or do_action(**)
* The regex will match the following
* - Any depth of nesting of parentheses, so apply_filters( 'filter_name', parameter( 1,2 ) ) will be matched
* - Whitespaces that might exist between apply_filters or do_action and the first parentheses
*/
// Use file_get_contents to get contents of the php file
$get_file_contents = file( $file );
foreach ( $get_file_contents as $key=>$get_file_content ) {
preg_match_all( '/(apply_filters|do_action)\s*(\([^()]*(?:(?-1)[^()]*)*+\))/', $get_file_content, $matches );
if ( $matches[0] )
$array[$name][$key+1] = $matches[0];
}
}
if ( $array ) {
foreach ( $array as $file_name=>$values ) {
$output .= '<ul>';
$output .= '<strong>File Path: ' . $file_name .'</strong></br>';
$output .= 'The following filters and/or actions are available';
foreach ( $values as $line_number=>$string ) {
$whitespaces = ' ';
$output .= '<li>Line reference ' . $line_number . $whitespaces . $string[0] . '</li>';
}
$output .= '</ul>';
}
}
return $output;
}
return false;
}
Vous pouvez utiliser au suivi sur un modèle, frontend ou backend
echo get_all_filters_and_actions2( 'E:\xammp\htdocs\wordpress\wp-includes' );
Cela imprimera
ÉDITER
C'est essentiellement autant que je peux le faire sans que les scripts expirent ou manquent de mémoire. Avec le code de l'option 2, c'est aussi simple que d'aller dans ledit fichier et ladite ligne dans le code source, puis d'obtenir toutes les valeurs de paramètres valides du filtre / de l'action, et aussi, ce qui est important, d'obtenir la fonction et le contexte dans lequel le filtre / action est utilisé