Non ci sono script o plugin che conosco per fare quello che vuoi. Come hai affermato, esistono script ( anche variabili globali ) che è possibile utilizzare per stampare i filtri e le azioni attualmente in uso.
Per quanto riguarda i filtri e le azioni dormienti, ho scritto due funzioni molto semplici ( con qualche aiuto qua e là ) che trova tutto apply_filters
e do_action
le istanze in un file e poi lo stampa fuori
BASE
Useremo il RecursiveDirectoryIterator
, RecursiveIteratorIterator
e RegexIterator
classi PHP per ottenere tutti i file PHP all'interno di una directory. Ad esempio, sul mio localhost, ho usatoE:\xammp\htdocs\wordpress\wp-includes
Quindi eseguiremo il ciclo tra i file e cercheremo e restituiremo ( preg_match_all
) tutte le istanze di apply_filters
e do_action
. L'ho impostato per abbinare istanze nidificate di parentesi e anche per abbinare possibili spazi bianchi tra apply_filters
/ do_action
e la prima parentesi
Semplicemente creeremo quindi un array con tutti i filtri e le azioni, quindi eseguiremo un ciclo attraverso l'array e genereremo il nome del file, i filtri e le azioni. Salteremo i file senza filtri / azioni
NOTE IMPORTANTI
Queste funzioni sono molto costose. Eseguili solo su un'installazione di prova locale.
Modificare le funzioni secondo necessità. Puoi decidere di scrivere l'output in un file, creare una pagina di backend speciale per questo, le opzioni sono illimitate
OPZIONE 1
La prima funzione delle opzioni è molto semplice, restituiremo il contenuto di un file come stringa usando file_get_contents
, cercheremo le apply_filters
/ do_action
istanze e semplicemente invieremo il nome del file e i nomi di filtro / azione
Ho commentato il codice per un facile seguito
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;
}
È possibile utilizzare a seguire su un modello, frontend o backend
echo get_all_filters_and_actions( 'E:\xammp\htdocs\wordpress\wp-includes' );
Questo stamperà
OPZIONE 2
Questa opzione è un po 'più costosa da eseguire. Questa funzione restituisce il numero di riga in cui è possibile trovare il filtro / l'azione.
Qui usiamo file
per esplodere il file in un array, quindi cerchiamo e restituiamo il filtro / azione e il numero di riga
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;
}
È possibile utilizzare a seguire su un modello, frontend o backend
echo get_all_filters_and_actions2( 'E:\xammp\htdocs\wordpress\wp-includes' );
Questo stamperà
MODIFICARE
Questo è fondamentalmente tutto ciò che posso fare senza che gli script scadano o esauriscano la memoria. Con il codice nell'opzione 2, è facile come andare a detto file e detta linea nel codice sorgente e quindi ottenere tutti i valori dei parametri validi del filtro / azione, inoltre, soprattutto, ottenere la funzione e l'ulteriore contesto in cui viene utilizzato il filtro / azione