No hay ningún script o complemento que yo sepa que haga lo que quiera. Como ha dicho, hay secuencias de comandos ( incluso variables globales ) que puede usar para imprimir filtros y acciones que se utilizan actualmente.
En cuanto a los filtros y acciones latentes, he escrito dos funciones muy básicas ( con algo de ayuda aquí y allá ), que busca todos los apply_filters
y do_action
las instancias en un archivo y luego lo imprime
LO ESENCIAL
Vamos a utilizar el RecursiveDirectoryIterator
, RecursiveIteratorIterator
y RegexIterator
las clases PHP para obtener todos los archivos del PHP dentro de un directorio. Como ejemplo, en mi host local, he usadoE:\xammp\htdocs\wordpress\wp-includes
Luego recorreremos los archivos y buscaremos y devolveremos ( preg_match_all
) todas las instancias de apply_filters
y do_action
. Lo configuré para que coincida con las instancias anidadas de paréntesis y también para que coincida con los espacios en blanco posibles entre apply_filters
/ do_action
y el primer paréntesis
Simplemente crearemos una matriz con todos los filtros y acciones y luego recorreremos la matriz y mostraremos el nombre del archivo, los filtros y las acciones. Omitiremos archivos sin filtros / acciones
NOTAS IMPORTANTES
Estas funciones son muy caras. Ejecútelos solo en una instalación de prueba local.
Modifique las funciones según sea necesario. Puede decidir escribir la salida en un archivo, crear una página especial para eso, las opciones son ilimitadas
OPCIÓN 1
La primera función de opciones es muy simple, devolveremos el contenido de un archivo como una cadena, buscaremos file_get_contents
las instancias apply_filters
/ do_action
y simplemente enviaremos el nombre de archivo y los nombres de filtro / acción
He comentado el código para seguirlo fácilmente
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;
}
Puede usar a continuación en una plantilla, interfaz o backend
echo get_all_filters_and_actions( 'E:\xammp\htdocs\wordpress\wp-includes' );
Esto imprimirá
OPCION 2
Esta opción es un poco más costosa de ejecutar. Esta función devuelve el número de línea donde se puede encontrar el filtro / acción.
Aquí usamos file
para explotar el archivo en una matriz, luego buscamos y devolvemos el filtro / acción y el número de línea
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;
}
Puede usar a continuación en una plantilla, interfaz o backend
echo get_all_filters_and_actions2( 'E:\xammp\htdocs\wordpress\wp-includes' );
Esto imprimirá
EDITAR
Esto es básicamente todo lo que puedo hacer sin que los scripts excedan el tiempo de espera o se queden sin memoria. Con el código en la opción 2, es tan fácil como ir a dicho archivo y dicha línea en el código fuente y luego obtener todos los valores de parámetros válidos del filtro / acción, también, lo que es más importante, obtener la función y el contexto adicional en el que se usa el filtro / acción