Es gibt kein Skript oder Plugin, von dem ich weiß, dass es das tut, was Sie wollen. Wie Sie bereits angegeben haben, gibt es Skripte ( auch globale Variablen ), mit denen Sie Filter und Aktionen drucken können, die derzeit verwendet werden.
In Bezug auf ruhende Filter und Aktionen habe ich zwei sehr grundlegende Funktionen geschrieben ( mit etwas Hilfe hier und da ), die alle apply_filters
und do_action
Instanzen in einer Datei finden und dann ausdrucken
GRUNDLAGEN
Wir verwenden das RecursiveDirectoryIterator
, RecursiveIteratorIterator
und RegexIterator
Klassen PHP alle die PHP - Dateien in einem Verzeichnis zu erhalten. Als Beispiel habe ich auf meinem localhost verwendetE:\xammp\htdocs\wordpress\wp-includes
Wir werden dann die Dateien durchlaufen und preg_match_all
alle Instanzen von apply_filters
und suchen und zurückgeben ( ) do_action
. Ich habe es so eingerichtet, dass es mit verschachtelten Instanzen von Klammern und auch mit möglichen Leerzeichen zwischen apply_filters
/ do_action
und der ersten Klammer übereinstimmt
Wir werden dann einfach ein Array mit allen Filtern und Aktionen erstellen und dann das Array durchlaufen und den Dateinamen sowie die Filter und Aktionen ausgeben. Wir werden Dateien ohne Filter / Aktionen überspringen
WICHTIGE NOTIZEN
Diese Funktionen sind sehr teuer. Führen Sie sie nur in einer lokalen Testinstallation aus.
Ändern Sie die Funktionen nach Bedarf. Sie können entscheiden, die Ausgabe in eine Datei zu schreiben, eine spezielle Backend-Seite dafür zu erstellen, die Optionen sind unbegrenzt
OPTION 1
Die erste Optionsfunktion ist sehr einfach. Wir geben den Inhalt einer Datei als Zeichenfolge zurück file_get_contents
, suchen nach den apply_filters
/ do_action
Instanzen und geben einfach den Dateinamen und die Filter- / Aktionsnamen aus
Ich habe den Code zur leichteren Verfolgung kommentiert
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;
}
Sie können at follow für eine Vorlage, ein Frontend oder ein Backend verwenden
echo get_all_filters_and_actions( 'E:\xammp\htdocs\wordpress\wp-includes' );
Dies wird gedruckt
OPTION 2
Diese Option ist etwas teurer in der Ausführung. Diese Funktion gibt die Zeilennummer zurück, in der sich der Filter / die Aktion befindet.
Hier verwenden wir file
, um die Datei in ein Array zu zerlegen, dann suchen wir den Filter / die Aktion und die Zeilennummer und geben sie zurück
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;
}
Sie können at follow für eine Vorlage, ein Frontend oder ein Backend verwenden
echo get_all_filters_and_actions2( 'E:\xammp\htdocs\wordpress\wp-includes' );
Dies wird gedruckt
BEARBEITEN
Dies ist im Grunde so viel, wie ich tun kann, ohne dass die Skripte abgelaufen sind oder nicht genügend Speicherplatz zur Verfügung steht. Mit dem Code in Option 2 ist es so einfach, wie die Datei und die Zeile im Quellcode aufzurufen und dann alle gültigen Parameterwerte des Filters / der Aktion abzurufen. Wichtig ist auch, die Funktion und den weiteren Kontext abzurufen, in dem Der Filter / die Aktion wird verwendet