有谁知道如何获取当前插件中的所有功能?只有它声明的那些功能?
我知道函数get_defined_functions()
并尝试过,但是这个函数获取了所有函数的列表,但我只需要当前的插件。
也许在WP中有一个函数可以获取插件中的所有函数吗?
当然我们可以通过以下方式获取函数的名称,但这不是最好的方法,因为我们的插件可以包含其他文件而我无法获得它们的功能。
$filename = __FILE__;
$matches = array();
preg_match_all('/function\s+(\w*)\s*\(/', file_get_contents($filename), $matches);
$matches = $matches[1];
答案 0 :(得分:2)
以下代码基于此Q& A's:
get_defined_functions_in_file()
,它运作正常。这只是一个测试,它将在每个WP页面(前端和后端)中转储所有PHP文件及其功能。代码查找当前插件目录中的所有PHP文件,并搜索每个文件函数。
add_action('plugins_loaded', function() {
$path = plugin_dir_path( __FILE__ );
$it = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) );
foreach ($it as $file) {
$ext = pathinfo( $file, PATHINFO_EXTENSION );
if( 'php' === $ext ) {
echo "<br><br>".$file."<br>";
$arr = get_defined_functions_in_file( $file );
var_dump ($arr);
}
}
});
/* From https://stackoverflow.com/a/2197870 */
function get_defined_functions_in_file($file) {
$source = file_get_contents($file);
$tokens = token_get_all($source);
$functions = array();
$nextStringIsFunc = false;
$inClass = false;
$bracesCount = 0;
foreach($tokens as $token) {
switch($token[0]) {
case T_CLASS:
$inClass = true;
break;
case T_FUNCTION:
if(!$inClass) $nextStringIsFunc = true;
break;
case T_STRING:
if($nextStringIsFunc) {
$nextStringIsFunc = false;
$functions[] = $token[1];
}
break;
// Anonymous functions
case '(':
case ';':
$nextStringIsFunc = false;
break;
// Exclude Classes
case '{':
if($inClass) $bracesCount++;
break;
case '}':
if($inClass) {
$bracesCount--;
if($bracesCount === 0) $inClass = false;
}
break;
}
}
return $functions;
}