WordPress 후크 가이드
게시 됨: 2021-07-19후크 시스템은 초심자에게 벅차게 보일 수 있지만 WordPress의 가장 좋은 점 중 하나입니다. 이 가이드는 후크의 기본 사항과 사용 방법을 이해하는 데 도움이 되며 예제 사용법과 추가 조언을 제공합니다.

후크를 사용해야 하는 이유는 무엇입니까?
혹시 모르니 워드프레스(WP)에서 코어 파일을 변경 하는 것은 정말 나쁜 생각입니다. 보안 위험은 제쳐두고 WP를 업데이트할 때마다 변경 사항을 덮어씁니다! 플러그인과 테마도 마찬가지입니다.
물론, 당신은 모든 업데이트를 추적 할 수 있으며, 변경 사항을 구현 다시. 또한 꿀에서 얻을 수있는 벌집을 통해 펀치 수 있습니다. 편리해 보이지만 조만간 찔릴 가능성이 있습니다.
간단히 말해서, 핵심 기능 변경의 위험을 상쇄하기 때문에 후크를 사용해야 합니다 .
이런 의미에서 후크의 중요성은 아무리 강조해도 지나치지 않습니다 . 그것들은 WP 확장성의 핵심이자 플러그인 및 테마 생태계의 초석입니다. 기본 사항을 배우고 잘 활용하면 두통을 많이 줄일 수 있습니다.
그들은 무엇인가?
후크 는 WP 로드 시퀀스 전체에서 발생 하는 이벤트 로 생각할 수 있습니다 . WP가 후크를 만나면 계속하기 전에 해당 후크에 연결된 모든 기능을 실행합니다.
따라서 후크를 활용하여 WP 전체에서 기능을 추가하거나 변수를 변경할 수 있습니다 . 기존 후크를 사용하고 새 후크를 추가할 수 있습니다. 필요하지 않은 후크는 제거할 수 있습니다. 동일한 후크를 두 번 이상 칠 수 있으며 적절하다고 생각되는 각 기능의 우선 순위를 지정할 수 있습니다. 사용 가능한 후크와 노출되는 데이터에 의해서만 제한되는 매우 유연한 시스템입니다.
그들은 어떻게 작동합니까?
후크에 하나 이상의 기능을 추가합니다. 테마, 플러그인 또는 WP 자체에서 다른 기능을 추가할 수도 있습니다. WP가 로드되면 후크가 발생합니다. 후크와 관련된 모든 기능 목록을 확인합니다. WP는 이러한 모든 기능 을 우선 순위에 따라 실행합니다 . 완료되면 후크 이후의 모든 것을 다시 로드합니다.
그들은 같은 중요시하는 점은 무엇입니까?
후크에 함수를 추가하면 다음과 같습니다.
add_action( $hook_name, $function_name, $priority, $arguments );
$hook_name 은 타겟팅하려는 후크의 이름입니다.
$function_name 은 해당 후크에 추가하려는 함수의 이름입니다.
$ 우선 순위 큐의 "$ hook_name에서 우선 S '는 $ FUNCTION_NAME를 나타내는 정수이다. 숫자가 낮을수록 우선 순위가 높습니다. 1에서 시작하여 이 숫자는 원하는 만큼 높을 수 있지만(시스템 제한 내에서) 40보다 높을 가능성은 낮습니다. 기본값은 10입니다.
$arguments 는 함수에서 사용 중인 인수의 수를 나타내는 정수입니다. 이것은 함수에 전달된 인수의 수와 일치 해야 합니다 . 기본값은 1입니다.
후크에서 함수를 제거하는 것은 거의 동일합니다.
remove_action( $hook_name, $function_name, $priority );
은 $ FUNCTION_NAME와 $ 우선 순위는 해당 ADD_ACTION 함수에서 원래 값과 일치해야하거나 제거되지 않습니다!
후크의 종류
후크에는 액션 후크와 필터 후크 의 두 가지 주요 유형이 있습니다. 그것들은 여러 면에서 유사합니다. add_action() 과 그에 상응하는 add_filter() 는 모두 같은 방식으로 호출됩니다. 차이점은 전달하는 함수에 있습니다.
// 일부 코드 실행
add_action( 'where_to_do_the_thing', 'do_the_thing' );
함수 do_the_thing() {
// 작업을 수행하는 데 필요한 일부 작업을 수행합니다.
}// 변수 변경
add_filter( 'the_thing', 'change_the_thing' );
함수 change_the_thing( $thing ) {
// $thing을 필터링하고 필요한 대로 변경한 다음...반환 $thing;
}
두 번째 예에서, 첫 번째 인자는 전달 능으로 개정되는 N의 값임을 유의해야한다. 추가 인수는 유틸리티 전용이며 후크를 통해 다시 전달되지 않습니다.
$priority 와 $arguments 를 생략한 것을 눈치채셨을 것입니다 . 기본값이 괜찮기 때문입니다. 도움이된다면 위의 내용은 본질적으로 다음과 같습니다.
// 일부 코드 실행
add_action( 'where_to_do_the_thing', 'do_the_thing', 10, 1 );
// 변수 변경
add_filter( 'the_thing', 'change_the_thing', 10, 1 );
이것들은 물론 인위적인 예이지만 둘 사이의 주요 차이점을 보여줍니다. 필터는 변수를 변경하기 위한 것이고 작업은 코드를 추가하기 위한 것입니다.
덜 인위적인 예
새 사용자가 사이트에 등록할 때 WP에서 이메일 알림을 보내도록 하고 싶다고 가정해 보겠습니다. WP 코덱을 참조하면 user_register 작업 후크 를 찾을 수 있습니다. 이것은 $user_id 변수를 제공하여 사용자의 세부 정보를 얻는 데 사용할 수 있습니다. wp_mail() 이 나머지를 처리합니다.
add_action( 'user_register', 'notify_on_user_registration' );
기능 알림_on_user_registration( $user_id ) {// 사용자 가져오기
$user = get_user_by( 'id', $user_id );// 이메일 제목과 본문 준비
$subject = "신규 사용자 등록";
$message = "새로운 사용자 {$user->first_name} {$user->last_name}이(가) 등록되었습니다.";// 이메일 보내기
wp_mail( '[email protected]', $subject, $message );
}
로그인할 때 사용자를 첫 페이지로 리디렉션하려면 어떻게 해야 합니까? 기본적으로 사용자가 리디렉션되는 URL을 제공 하는 login_redirect 후크를 사용하여 이를 쉽게 달성할 수 있습니다 .

add_filter( 'login_redirect', 'redirect_user_on_login' );
기능 리디렉션_사용자_온_로그인( $redirect_to ) {
반환 home_url();
}
이것을 추가한 직후에 관리자로서 홈페이지 대신 WP 대시보드로 바로 이동하고 싶다는 것을 빨리 깨닫게 됩니다. 문제 없습니다. 관리자만 사용할 수 있도록 후크를 수정하면 됩니다.
add_filter( 'login_redirect', 'redirect_user_on_login', 10, 3 );
기능 redirect_user_on_login( $redirect_to, $request, $user ) {
// 사용자가 관리자가 아닌 경우 로그인 URL 변경
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( '관리자', $user->roles ) ) {
$redirect_to 반환; // 관리자를 기본값으로 리디렉션(관리자 영역)
}
}$redirect_to 반환;
}
$priority 와 $arguments 가 사용 되었음을 주목 하세요!
사용자의 레벨을 확인하려면 후크의 세 번째 인수에 액세스해야 하므로 3개의 인수를 표시해야 합니다. 값 3을 전달합니다.
10 $의 우선 순위 값은 물론 기본적으로 동일하지만, 위에서 필요로하는 $ 인수 값에 도달하기 위해 지정된다.
나만의 후크 만들기
사용자 정의 후크를 만드는 능력은 당신의 손 안에 있습니다! WP에서 제공하는 기능은 다음과 같습니다.
do_action( $hook_name, $arg_1, $arg_2 … $arg_n );
apply_filters( $hook_name, $arg_1, $arg_2 … $arg_n );
다시 말하지만, 그들은 일종의 유사합니다. 두 함수 모두 이름을 허용합니다. 여기에서 후크의 이름을 지정합니다. 다음 인수는 모두 해당 후크에 추가하는 함수에 사용할 수 있는 동일한 인수입니다. apply_filters() 에는 최소한 하나의 추가 인수(필터링되는 인수 )가 있어야 하지만 다른 모든 것은 선택 사항입니다.
예를 들어, 여는 body 태그 바로 앞에 분석 스크립트를 삽입하고 싶지만 header.php 를 엉망으로 만들고 싶지 않은 경우 :
<?php do_action( 'before_body_tag' ); ?;>
</head>
<본체>
그런 다음 필요한 만큼 스크립트를 추가할 수 있습니다.
add_action( 'before_body_tag', 'add_analytics_custom' );
함수 add_analytics_custom() {
// <script> 태그 및 분석 코드가 여기에 표시됩니다.
}
apply_filters() 는 약간 다르게 작동합니다. 위에서 설명한 것처럼 필터는 값을 수정하는 데 사용됩니다. 필터는 값을 반환하므로 apply_filters() 호출을 변수에 할당합니다 .
<?php $text = apply_filters( 'call_to_action_text', '회사 소개' ); ?>
<a href="<?php echo get_permalink( 'about' ); ?>” 클래스=”버튼 CTA”>
<?php 에코 $text; ?>
</a>// 또는 apply_filters()의 결과를 직접 에코할 수 있습니다.
<a href="<?php echo get_permalink( 'about' ); ?>” 클래스=”버튼 CTA”>
<?php echo apply_filters( 'call_to_action_text', '회사 소개' ); ?>
</a>
그런 다음 필요에 따라 필터링된 변수를 수정할 수 있습니다.
add_filter( 'call_to_action_text', 'change_call_to_action_text' );
함수 change_call_to_action_text( $text ) {
if ( is_front_page() ) {
$text = '더 알아보기';
}반환 $text;
}
단점
완벽한 시스템은 없으며 후크도 예외는 아닙니다. 코어 후크에 관해서는 일반적으로 주어진 작업을 수행해야 합니다. 아주 가끔 후크가 가장 편리한 위치에 있지 않은 상황에 직면하게 될 것입니다. 이럴 때 할 수 있는 일이 많지 않으니 창의적인 해결책을 찾을 수 있는 기회로 삼으세요!
또한 후크는 WP 디렉토리 구조 내 어디에나 존재할 수 있으므로 특정 논리가 발생하는 위치를 찾는 것이 때때로 까다롭습니다. 이것은 함수 후크를 자체 파일로 분리하여 상쇄할 수 있습니다.
추가 조언
- 후크에 대한 함수를 생성할 때 이름이 고유한지 확인하십시오. 그렇지 않으면 충돌이 발생합니다. 사용자 정의 후크 및 필터 이름도 마찬가지입니다!
- 템플릿을 깔끔하게 유지하려면 후크를 사용하세요. 템플릿 전체에 삽입된 몇 가지 일반적인 do_action() 후크는 마크업에서 논리를 멀리 유지하는 데 도움이 될 수 있습니다(거의 항상 좋은 생각입니다).
- 새 플러그인을 설치할 때 플러그인이 제공하는 후크를 확인하고 이를 어떻게 활용할지 생각해 보세요. 이 플러그인은 확실히 당신이 원하는 것을하지 않는 것을 피할 시간에 특히 유용합니다.
- 작업이나 필터를 추가할 때 함수 이름을 함수 자체로 바꿀 수 있습니다. 이렇게 하면 작업과 필터를 독립적으로 유지하는 데 도움이 될 수 있습니다. 이 방법으로 추가된 함수는 remove_action() 또는 remove_filter() 를 사용하여 제거할 수 없으므로 주의하십시오!
add_action( 'where_to_do_the_thing', function() {
echo '일이 끝났습니다.';
}, 10, 1);
- did_action() 또는 has_action() 과 같이 사용 가능한 다른 후크 관련 함수를 확인하십시오 . 그것들을 아는 것만으로도 언제 유용할지 모릅니다.
요약
후크를 사용하는 것은 습관의 문제입니다. WP 프로젝트에서 작업할 때마다 자신에게 두 가지 간단한 질문을 해보세요.
- "이 작업을 더 쉽게 할 수 있는 고리가 있습니까?"
- "나중에 이것을 더 쉽게 만들 수 있는 후크를 추가할 수 있습니까?"
이러한 태도로 WP 개발에 접근하면 많은 문이 열릴 것입니다.
이 가이드의 예는 빙산의 일각입니다. 플러그인 및 테마의 방대한 라이브러리는 말할 것도 없이 WP 코어에만 수백 개의 후크가 있습니다. 핵심 WP 후크의 전체 목록은 WP 작업 참조 및 필터 참조 를 살펴보십시오 .
웹 개발에 도움이 필요하면 주저하지 말고 저희에게 연락하십시오.
