あなたが望むことをするために私が知っているスクリプトやプラグインはありません。既に述べたように、現在使用されているフィルターやアクションを出力するために使用できるスクリプト(グローバル変数も)があります。
休止中のフィルターとアクションについては、ファイル内のすべてとインスタンスを検索して出力する2つの非常に基本的な関数(いくつかのヘルプがあちこちにあります)を作成しましたapply_filters
do_action
基本
とPHPクラスを使用してRecursiveDirectoryIterator
、ディレクトリ内のすべてのPHPファイルを取得します。例として、私のローカルホストでは、RecursiveIteratorIterator
RegexIterator
E:\xammp\htdocs\wordpress\wp-includes
私たちは、その後、ファイルをループし、検索とリターン(うpreg_match_all
)のすべてのインスタンスをapply_filters
してdo_action
。括弧のネストされたインスタンスに一致し、apply_filters
/ do_action
と最初の括弧の間の可能な空白に一致するように設定しました
次に、すべてのフィルターとアクションを含む配列を作成し、その配列をループしてファイル名とフィルターとアクションを出力します。フィルター/アクションのないファイルをスキップします
重要な注意事項
オプション1
最初のオプション関数は非常に単純です。を使用してファイルの内容を文字列として返しfile_get_contents
、apply_filters
/ do_action
インスタンスを検索して、ファイル名とフィルター/アクション名を出力します
簡単にフォローできるようにコードにコメントしました
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
このオプションは、実行に少しコストがかかります。この関数は、フィルター/アクションが見つかる行番号を返します。
ここではfile
、ファイルを配列に分解するために使用し、フィルター/アクションと行番号を検索して返します
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のコードを使用すると、ソースファイルの上記のファイルと上記の行に移動し、フィルター/アクションのすべての有効なパラメーター値を取得するだけでなく、重要なのは、関数と次のコンテキストを取得することと同じくらい簡単です。フィルター/アクションが使用されます