据我所知,没有任何脚本或插件可以满足您的需要。如前所述,有一些脚本(甚至是全局变量)可用于打印当前使用的筛选器和操作。
至于休眠过滤器和操作,我编写了两个非常基本的函数(,在这里和那里都有一些帮助),它在文件中查找所有的应用过滤器和执行操作实例,然后将其打印出来
基础知识我们将使用递归目录迭代器、递归迭代器和正则迭代器PHP类来获取目录中的所有PHP文件。例如,在本地主机上,我使用了E:\\xammp\\htdocs\\wordpress\\wp includes
然后,我们将遍历这些文件,搜索并返回(preg\\u match\\u all
)所有应用过滤器和执行操作的实例。我已经将其设置为匹配括号的嵌套实例,还可以匹配应用过滤器和第一个括号之间可能的空格
我们将简单地创建一个包含所有筛选器和操作的数组,然后遍历该数组并输出文件名、筛选器和操作。我们将跳过没有筛选器/操作的文件
重要注意事项此功能非常昂贵。仅在本地测试安装上运行它们。
根据需要修改功能。您可以决定将输出写入文件,为此创建一个特殊的后端页面,选项是无限的
第一个选项功能非常简单,我们将使用file\\u get\\u contents以字符串形式返回文件内容,搜索应用过滤器实例,并简单地输出文件名和过滤器/操作名称
我对代码进行了注释,以便于后续操作
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;
}
您可以在后续模板、前端或后端使用
echo get_all_filters_and_actions( \'E:\\xammp\\htdocs\\wordpress\\wp-includes\' );
这将打印
选项2运行此选项的成本稍高。此函数返回可以找到筛选器/操作的行号。
在这里,我们使用文件将文件分解为一个数组,然后搜索并返回过滤器/操作和行号
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;
}
您可以在后续模板、前端或后端使用
echo get_all_filters_and_actions2( \'E:\\xammp\\htdocs\\wordpress\\wp-includes\' );
这将打印
编辑这基本上是我在没有脚本超时或内存不足的情况下所能做的。使用选项2中的代码,只需访问源代码中的所述文件和所述行,然后获取过滤器/操作的所有有效参数值,同样重要的是,获取使用过滤器/操作的函数和其他上下文