워드 프레스 : 'the_content'필터에 등록 된 모든 기능을 가져 오는 방법
WordPress, 특히 버전 3.0 이상에 대한 질문이 있습니다.
누구든지 the_content 필터에 적용되거나 '등록'되는 모든 함수의 배열 또는 목록을 얻는 방법을 알고 있습니까?
아이디어는 wpautop와 같이 필터에서 제거 할 수있는 기능의 확인란 목록을 생성하는 것입니다. 하드 코딩 된 레이블로 필터에서 함수를 제거하는 방법을 알고 있지만보다 동적 인 솔루션을 만들고 싶습니다.
이것이 가능하고 어떻게 할 수 있는지 누구든지 아이디어가 있다면 나는 매우 관심이있을 것입니다. 감사.
필터 배열에서 인쇄하는 간단한 기능?
function print_filters_for( $hook = '' ) {
global $wp_filter;
if( empty( $hook ) || !isset( $wp_filter[$hook] ) )
return;
print '<pre>';
print_r( $wp_filter[$hook] );
print '</pre>';
}
필요한 곳에 전화하십시오.
print_filters_for( 'the_content' );
이것은 $wp_filter
배열의 데이터 외에도 후크가 연결된 파일의 경로와 함수가 정의 된 코드의 행을 표시 하는 좀 더 고급 예제 입니다.
특정 작업 (또는 필터)에 연결된 함수의 기본 목록을 얻으려면 필터 배열에서 항목을 가져 오는 것으로 충분하지만 함수는 다양한 방법 (클래스 메서드 또는 클로저)으로 첨부 될 수 있으므로 해당 목록에는 문자열로 표시되는 객체를 포함하는 수많은 비정상적인 데이터. 이 예는 우선 순위에 따라 관련 데이터 만 표시합니다.
- 함수 이름 (콜백 구문에 따라 다름) :
- 함수 콜백 :
'function_name'
- 개체 방법 :
array( $object, 'function_name' )
- 정적 클래스 메서드 :
array( 'class_name', 'function_name' )
및'class_name::function_name'
- 폐쇄:
function() {}
- 상대 정적 클래스 메서드 :
array( 'class_name', 'parent::function_name' )
- 함수 콜백 :
- 허용되는 인수
- 파일 이름
- 출발 선
- 신분증
- 우선 순위
function list_hooks( $hook = '' ) {
global $wp_filter;
if ( isset( $wp_filter[$hook]->callbacks ) ) {
array_walk( $wp_filter[$hook]->callbacks, function( $callbacks, $priority ) use ( &$hooks ) {
foreach ( $callbacks as $id => $callback )
$hooks[] = array_merge( [ 'id' => $id, 'priority' => $priority ], $callback );
});
} else {
return [];
}
foreach( $hooks as &$item ) {
// skip if callback does not exist
if ( !is_callable( $item['function'] ) ) continue;
// function name as string or static class method eg. 'Foo::Bar'
if ( is_string( $item['function'] ) ) {
$ref = strpos( $item['function'], '::' ) ? new ReflectionClass( strstr( $item['function'], '::', true ) ) : new ReflectionFunction( $item['function'] );
$item['file'] = $ref->getFileName();
$item['line'] = get_class( $ref ) == 'ReflectionFunction'
? $ref->getStartLine()
: $ref->getMethod( substr( $item['function'], strpos( $item['function'], '::' ) + 2 ) )->getStartLine();
// array( object, method ), array( string object, method ), array( string object, string 'parent::method' )
} elseif ( is_array( $item['function'] ) ) {
$ref = new ReflectionClass( $item['function'][0] );
// $item['function'][0] is a reference to existing object
$item['function'] = array(
is_object( $item['function'][0] ) ? get_class( $item['function'][0] ) : $item['function'][0],
$item['function'][1]
);
$item['file'] = $ref->getFileName();
$item['line'] = strpos( $item['function'][1], '::' )
? $ref->getParentClass()->getMethod( substr( $item['function'][1], strpos( $item['function'][1], '::' ) + 2 ) )->getStartLine()
: $ref->getMethod( $item['function'][1] )->getStartLine();
// closures
} elseif ( is_callable( $item['function'] ) ) {
$ref = new ReflectionFunction( $item['function'] );
$item['function'] = get_class( $item['function'] );
$item['file'] = $ref->getFileName();
$item['line'] = $ref->getStartLine();
}
}
return $hooks;
}
Since hooks can be added and removed throughout the entire runtime, the output depends on at what point the function is called ( wp_footer
action is a good place to get the complete list )
print_r
example for the_content
filter:
Array
(
[0] => Array
(
[id] => 000000004c8a4a660000000011808a14run_shortcode
[priority] => 8
[function] => Array
(
[0] => WP_Embed
[1] => run_shortcode
)
[accepted_args] => 1
[file] => C:\xampp\htdocs\wordpress\wp-includes\class-wp-embed.php
[line] => 58
)
[1] => Array
(
[id] => wptexturize
[priority] => 10
[function] => wptexturize
[accepted_args] => 1
[file] => C:\xampp\htdocs\wordpress\wp-includes\formatting.php
[line] => 41
)
[2] => Array
(
[id] => 0000000006c5dc6d0000000064b1bc8e
[priority] => 10
[function] => Closure
[accepted_args] => 1
[file] => C:\xampp\htdocs\wordpress\wp-content\plugins\plugin\plugin.php
[line] => 16
)
.....
Edit: 2017-05-05
- adapted for
WP_Hook
class - added priority
- fixed: error raised if callback does not exists, although WordPress also raises a warning for that
- fixed: hook with the same id but different priority overwrites the previous one
ReferenceURL : https://stackoverflow.com/questions/5224209/wordpress-how-do-i-get-all-the-registered-functions-for-the-content-filter
'development' 카테고리의 다른 글
내 iPhone 앱에서 문자열을 날짜로 변환 (0) | 2021.01.05 |
---|---|
403 오류 페이지 에뮬레이트 (0) | 2021.01.05 |
Github Ahead / Behind Metrics의 의미 (0) | 2021.01.05 |
MySQL의 문자열에서 알파벳이 아닌 모든 문자를 제거하는 방법은 무엇입니까? (0) | 2021.01.05 |
DialogFragment.getDialog가 null을 반환합니다. (0) | 2021.01.05 |