내가 원하는 것을 할 수있는 스크립트 나 플러그인이 없습니다. 언급했듯이 현재 사용중인 필터 및 작업을 인쇄하는 데 사용할 수있는 스크립트 ( 전역 변수 )가 있습니다.
휴면 필터와 행동에 관해서는, 나는 (이 개 매우 기본적인 기능을 작성했습니다 여기에 몇 가지 도움을 거기에 ) 모든 발견되는 apply_filters
및 do_action
파일에 인스턴스를하고 그것을 밖으로 인쇄
기초
RecursiveDirectoryIterator
, RecursiveIteratorIterator
및 RegexIterator
PHP 클래스를 사용하여 디렉토리 내의 모든 PHP 파일을 가져옵니다. 예를 들어, 로컬 호스트에서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의 코드를 사용하면 소스 코드에서 해당 파일과 행으로 이동 한 다음 필터 / 액션의 모든 유효한 매개 변수 값을 가져 오는 것이 쉬워집니다. 또한 중요한 것은 함수와 추가 컨텍스트를 얻는 것입니다. 필터 / 액션이 사용됩니다