워드프레스의 플러그인 메커니즘은 실제로 이 후크입니다. 중국어로 후크로 번역되어 워드프레스 코어 실행에 참여할 수 있게 해줍니다. 아래에서 자세히 알아보세요.
훅 분류
Hook는 두 가지 유형으로 나뉘는데 하나는 Action이고 다른 하나는 Filter입니다. 이 두 후크의 구현 원리는 기본적으로 동일합니다. 나중에 언급하겠지만 사용법의 차이점은 필터에는 반환 값이 있지만 작업에는 없다는 점입니다.
액션의 아이디어는 이메일 보내기 등과 같은 상황이나 특별한 위치에서 일부 기능을 수행할 수 있도록 하는 것입니다. 필터를 사용하면 WordPress 코어가 사용해야 하는 값을 수정할 수 있습니다. WordPress는 이러한 값을 사용하여 함수의 반환 값 등과 같은 작업을 수행합니다.
액션훅
wp_head는 매우 일반적으로 사용되는 액션 후크입니다. 개발자는 wp_head() 함수를 head 태그에 추가합니다. 실제로 wp_head 후크를 호출하는 함수입니다.
플러그인 개발자가 head 태그에 문장을 추가하려는 경우 wp_head 후크를 사용할 수 있습니다. 다음은 간단한 예입니다.
//在 head 标签添加一些内容 function Bing_add_head_tag(){ echo '添加内容'; } add_action( 'wp_head', 'Bing_add_head_tag' );
코드 추가 후 프론트엔드 웹페이지의 소스코드를 보면 head 태그에 우리가 추가한 내용을 확인할 수 있습니다.
위는 문장을 출력하는 간단한 예시입니다. 이 후크를 사용하면 404 페이지가 나타날 때 관리자에게 이메일을 보내는 플러그인을 만들 수도 있습니다. 아래에 간단하게 작성했습니다.
//遇到 404 页面给管理员发送邮件 function Bing_404_page_mail(){ if( !is_404() ) return;//如果不是 404 页面就退出函数 $to = get_option( 'admin_email' );//获取管理员地址 $subject = '遇到 404 页面啦!';//邮件标题 $message = '404 页面的地址:http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];//邮件内容 wp_mail( $to, $subject, $message );//发送邮件 } add_action( 'wp_head', 'Bing_404_page_mail' );
필터 후크
제 개인적인 경험에 따르면 필터 후크는 특히 PHP에 익숙하지 않은 사람들에게는 이해하기 어려울 수 있습니다.
필터 후크를 사용하면 항목의 값을 변경할 수 있습니다. 필터 콜백 함수는 현재 값인 매개변수를 허용합니다. 기사 콘텐츠를 호출하는 데 사용되는 the_content() 함수를 기억하세요. 이 함수는 the_content 필터를 제공합니다.
the_content 후크에 함수를 추가합니다. 이 함수는 현재 값인 매개변수를 받아야 합니다.
//文章内容全部链接新窗口打开 function Bing_autoblank( $content ){//$content 变量就是文章内容,因为其它过滤器也要过滤,所以这个内容可能是经过其它函数过滤的 $content = str_replace( '<a', '<a target="_blank"', $content );//添加 target="_blank" return $content;//必须要把过滤后的内容返回回去,否则值就丢了 } add_filter( 'the_content', 'Bing_autoblank' );
후크 원리
실제로 add_action() 및 add_filter()를 호출하면 $wp_filter 전역 변수에 배열 요소만 추가됩니다. 게다가 액션과 필터는 공통 전역 변수입니다. 같은 이름을 가지고 있습니다.
do_action()이 호출되면 $wp_filter 전역 변수에서 이 액션에 추가된 함수를 검색하여 루프에서 실행합니다.
apply_filters()는 do_action()보다 한 단계 더 있는데, 호출될 때마다 이 함수의 반환 값을 받고, 최종적으로 여러 번 필터링한 값을 반환하여 사용하는 것입니다.
현재 후크 목록 가져오기
WordPress 작업 및 필터는 플러그인 메커니즘의 핵심 부분으로, 특정 위치에서 수행해야 하는 작업을 적극적으로 추가할 수 있도록 해줍니다. 일반적으로 함수를 마운트하려면 add_action() 및 add_filter() 함수를 사용합니다.
이러한 후크는 $wp_filter 전역 변수에 저장되므로 후크 목록을 얻으려면 $wp_filter 전역 변수를 직접 가져올 수 있습니다.
<pre class="brush:php;toolbar:false"><?php var_dump( $GLOBALS['wp_filter'] ); ?>
위 코드는 후크 목록을 출력합니다.