WordPress에서 필터와 후크는 실제로 어떻게 작동합니까?
나는 뭔가 진보 된 것을 요구하고 있습니다. PHP에서 어떻게 구현됩니까? 예를 들어 다른 플러그인에서 모든 후크를 수집하여 코어 후크 등에 "연결"하는 방법은 무엇입니까?
WordPress에서 필터와 후크는 실제로 어떻게 작동합니까?
나는 뭔가 진보 된 것을 요구하고 있습니다. PHP에서 어떻게 구현됩니까? 예를 들어 다른 플러그인에서 모든 후크를 수집하여 코어 후크 등에 "연결"하는 방법은 무엇입니까?
답변:
기본적으로 필터 및 후크를 소환 하는 " 플러그인 API "는 다음 기능으로 구성됩니다.
apply_filters()
- 실행do_action
- 실행apply_filters_ref_array()
- 실행do_action_ref_array()
- 실행add_filter()
- 스택에 추가add_action()
- 스택에 추가전반적으로 몇 가지 글로벌 (워드 프레스 세계의 다른 것)이 있습니다.
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
첫 번째 는 모든 필터 이름을 하위 배열로 보유 $wp_filter
하는 전역 Array
입니다. 그런 다음 각 하위 배열에는 우선 순위 배열에서 소환되는 콜백 인 훨씬 더 많은 하위 배열이 있습니다.
따라서 실행 기능이 호출되면 WordPress는 해당 전역 배열에서 해당 이름의 키를 검색합니다. 그런 다음 첨부 된 콜백이 우선 순위 후에 우선 순위를 갖습니다. 앞에서 발생하는 유일한 것은 all
필터에 연결된 콜백 입니다.
당신이 사용하는 콜백을 추가 할 때 add_action
또는 add_filter
다음, 워드 프레스 첫번째 계산 덮어 이미 부착되지 콜백에 "독특한"ID를.
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
그런 다음 global $wp_filter
스택에 콜백을 추가합니다 .
$wp_filter[ $tag ][ $priority ][ $idx ] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
주 서브 배열은 $tag
(또는 액션 / 필터 이름)이며, 우선 순위에 따라 모든 것이 소환되고 "고유 한"콜백 / ID 문자열이 키로 사용됩니다.
나중에 $tag
/ action- / filter-name 으로 필터가 호출 되면 배열이 검색되고 콜백이 호출됩니다. 그것이 call_user_func_array
사용됨에 따라 얼마나 많은 인수가 첨부되는지는 중요하지 않습니다. 워드 프레스는이를 스스로 해결합니다.
foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
call_user_func_array(
$the_['function'],
array_slice(
$args,
0,
(int) $the_['accepted_args']
)
);
}
후크 는 WordPress 핵심 파일과 일부 상위 테마 파일에 모두 포함되어 있습니다. 파일의 특정 위치에 컨텐츠를 연결할 수 있습니다.
WordPress의 wp_head 훅이 그 예입니다. 자녀 테마에서이 후크를 사용하여 해당 위치에 콘텐츠를 추가 할 수 있습니다. '
예:
add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}
일부 프리미엄 테마에는 하위 테마에서 동일한 작업을 수행하는 데 사용할 수있는 동작 후크 도 포함 되어 있습니다. 다음 은 모든 액션 후크와 이들이 창세기 테마 프레임 워크에서 컨텐츠를 출력 한 위치를 포함 하는 시각적 맵 입니다.
예:
add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}
Genesis 테마 프레임 워크에서 header.php 파일을 열었을 때의 훅 모양은 다음과 같습니다.
do_action( 'genesis_header' );
여기의 워드 프레스 후크의 목록 은 여러 가지 방법으로 사용할 수는.
필터를 사용하면 기존 기능의 출력을 수정할 수 있으며 WordPress 코어 파일과 Genesis와 같은 일부 상위 테마 프레임 워크에 모두 포함됩니다.
Genesis Design Framework와 함께 사용할 수 있는 필터 목록은 다음과 같습니다.
다음 은 WordPress에 포함 된 필터 목록입니다.
다음은 Genesis와 같은 테마 프레임 워크에서 필터를 사용하는 방법에 대한 예입니다.
add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}
위의 코드는 자식 테마에서 작성자가 주석의 텍스트를 수정하는 데 사용될 수 있습니다. 모든 테마에서 작동합니다.
발췌 길이를 50 단어로 사용자 정의하는 또 다른 예는 다음과 같습니다.
add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50;
}
wp-includes / post-template.php 파일 에서 the_excerpt () 함수를 찾을 수 있습니다.
그 모습은 다음과 같습니다.
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
플러그인에서 후크와 필터를 사용하여 정확히 동일한 작업을 수행 할 수 있으며 부모 테마 또는 WordPress를 업데이트 할 때 코드가 손실되지 않습니다.
기본적으로 후크 및 필터를 사용하면 핵심 WordPress 파일 또는 부모 테마 파일을 편집하지 않고도 WordPress와 부모 테마를 모두 사용자 지정하고 수정할 수 있습니다.
부모 테마 프레임 워크에 후크 및 필터가 포함되어 있으면 부모 테마 템플릿 파일을 편집 할 필요가 없으므로 자식 테마를 사용자 정의하는 것이 훨씬 쉽습니다. 이렇게하면 테마를 안전하게 변경할 수 있습니다.