Tidak ada skrip atau plugin yang saya tahu melakukan apa yang Anda inginkan. Seperti yang telah Anda nyatakan, ada skrip ( bahkan variabel global ) yang dapat Anda gunakan untuk mencetak filter dan tindakan yang sedang digunakan.
Adapun filter dan tindakan aktif, saya telah menulis dua fungsi yang sangat mendasar ( dengan bantuan di sana-sini ) yang menemukan semua apply_filters
dan do_action
contoh dalam file dan kemudian mencetaknya
DASAR-DASAR
Kami akan menggunakan RecursiveDirectoryIterator
,, RecursiveIteratorIterator
dan RegexIterator
kelas PHP untuk mendapatkan semua file PHP dalam direktori. Sebagai contoh, di localhost saya, saya telah menggunakanE:\xammp\htdocs\wordpress\wp-includes
Kami kemudian akan mengulang file, dan mencari dan mengembalikan ( preg_match_all
) semua contoh dari apply_filters
dan do_action
. Saya telah mengaturnya agar sesuai dengan instance kurung yang disarangkan dan juga untuk mencocokkan spasi putih yang mungkin antara apply_filters
/ do_action
dan kurung pertama
Kami akan sederhana kemudian membuat array dengan semua filter dan tindakan dan kemudian loop melalui array dan menampilkan nama file dan filter dan tindakan. Kami akan melewati file tanpa filter / tindakan
CATATAN PENTING
Fungsi ini sangat mahal. Jalankan hanya pada instalasi tes lokal.
Ubah fungsi sesuai kebutuhan. Anda dapat memutuskan untuk menulis output ke file, membuat halaman backend khusus untuk itu, opsi tidak terbatas
PILIHAN 1
Fungsi opsi pertama sangat sederhana, kami akan mengembalikan konten file sebagai string menggunakan file_get_contents
, mencari apply_filters
/ do_action
instance dan hanya menampilkan nama file dan nama filter / tindakan
Saya telah berkomentar kode untuk mudah diikuti
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;
}
Anda dapat menggunakan follow pada templat, frontend atau backend
echo get_all_filters_and_actions( 'E:\xammp\htdocs\wordpress\wp-includes' );
Ini akan dicetak
PILIHAN 2
Opsi ini sedikit lebih mahal untuk dijalankan. Fungsi ini mengembalikan nomor baris tempat filter / tindakan dapat ditemukan.
Di sini kita gunakan file
untuk meledakkan file menjadi array, lalu kita mencari dan mengembalikan filter / tindakan dan nomor baris
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;
}
Anda dapat menggunakan follow pada templat, frontend atau backend
echo get_all_filters_and_actions2( 'E:\xammp\htdocs\wordpress\wp-includes' );
Ini akan dicetak
EDIT
Ini pada dasarnya sebanyak yang saya bisa lakukan tanpa waktu skrip habis atau kehabisan memori. Dengan kode pada opsi 2, semudah pergi ke file tersebut dan mengatakan baris dalam kode sumber dan kemudian mendapatkan semua nilai parameter yang valid dari filter / action, juga, yang penting, dapatkan fungsi dan konteks lebih lanjut di mana filter / aksi digunakan