WordPress
함수 : add_action ()
수색…
통사론
- add_action ($ tag, $ function_to_add)
- add_action ($ 태그, $ function_to_add, $ 우선 순위)
- add_action ($ 태그, $ function_to_add, $ 우선 순위, $ accepted_args)
매개 변수
매개 변수 | 세부 |
---|---|
$ 태그 | (문자열) (필수) $function_to_add 가 연결되는 작업의 이름 |
$ function_to_add | ( callable ) (필수) $tag 가 가리키는 동작을 수행 할 때 호출해야하는 함수 |
우선 순위 $ | (int) (선택 사항) 기본값 : 10 특정 작업과 관련된 기능이 실행되는 순서를 지정하는 데 사용됩니다. 낮은 숫자는 이전 실행과 일치하고 동일한 우선 순위를 가진 함수는 작업에 추가 된 순서대로 실행됩니다. |
$ accepted_args | (int) (선택 사항) 기본값 : 1 함수가 수락하는 인수의 수입니다. |
비고
add_action()
함수는 PHP 함수를 특정 액션 "태그"또는 이름과 연결하는 액션 훅을 생성합니다. 액션이 특정 태그로 do_action()
(또는 do_action_ref_array()
) 호출에 의해 "트리거"되면 그 태그에 "훅으로 연결된"모든 함수가 실행됩니다.
대부분의 경우이 함수는 테마의 functions.php
파일이나 플러그인 파일 또는이 중 하나가로드 한 다른 소스 파일에서 사용해야합니다.
이 함수는 플러그인 API 의 일부입니다.
기본 액션 훅
add_action()
의 가장 기본적인 응용 프로그램은 WordPress 설치 소스 코드의 특정 위치에서 실행될 사용자 정의 코드를 추가하는 것입니다. WordPress Core 에서 제공하는 액션을 사용하거나 플러그인과 같은 타사 코드로 만든 액션을 사용하거나 테마.
사이트의 <head></head>
섹션에 내용을 추가하려면 - 사이트의 저작권 정보를 찾을 수있는 위치를 나타내는 <link>
메타 요소 추가 - add_action()
을 사용하여 인쇄 할 함수를 첨부 할 수 있습니다 'wp_head'
액션 (WordPress가 <head>
섹션을 만들 때 "트리거")에 적절한 마크 업 :
function add_copyright_meta_link() {
echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}
add_action( 'wp_head', 'add_copyright_meta_link' );
액션 후크 우선 순위
임의의 수의 기능이 주어진 동작에 "구속"될 수 있습니다. 어떤 경우에는 hooked 함수가 다른 함수의 앞이나 뒤에 실행하는 것이 중요합니다. add_action()
, $priority
대한 세 번째 매개 변수가 add_action()
합니다.
$priority
인수가 생략되면이 함수는 기본 우선 순위 인 10
으로 연결됩니다. 액션이 "트리거"하면, "후크"기능은 최소로 추가하는 시작으로 호출됩니다 $priority
, 가장 큰과 기능에 진행 $priority
. 동일한 우선 순위를 공유하는 훅 된 함수는 추가 된 순서 add_action()
각 add_action()
호출이 실행 된 순서 add_action()
호출됩니다.
예를 들어 타사 플러그인이 'template_redirect'
작업에 훅 기능을 사용하여 방문자를 daily-deal
페이지로 연결하여 외부 전자 상거래 사이트에 대한 제휴 링크로 전달하지만 리디렉션을 원한다고 가정 해 보겠습니다. 로그인 한 사용자에게만 발생합니다. 로그 아웃 한 방문자를 로그인 페이지로 보내려면 자신의 'template_redirect'
후크를 사용해야합니다. 타사 플러그인이 기본 $piority
가 10
인 기능을 연결했다고 판단한 후 우선 순위 9
로 함수를 연결하여 로그인 한 수표가 먼저 발생하도록 할 수 있습니다.
function redirect_deal_visitors_to_login() {
if( is_page( 'daily-deal' ) && !user_is_logged_in() ) {
wp_redirect( wp_login_url() );
exit();
}
}
add_action( 'template_redirect', 'redirect_deal_visitors_to_login', 9 );
클래스 및 객체 메소드를 액션에 연결
PHP 클래스 는 코드 구성을 개선하고 이름 충돌을 최소화하는 강력한 도구입니다. 어떤 시점이나 다른 시점에서 필연적으로 클래스 메소드에 대한 액션 훅을 만드는 방법에 대한 문제가 발생합니다.
$function_to_add
인자는 종종 함수의 이름을 포함하는 문자열로 보여진다. 그러나 인자의 데이터 타입은 실제로 " callable "이며, 우리의 목적을 위해 "함수 나 메소드에 대한 참조"로 요약 될 수있다.
클래스와 객체의 메소드를 참조하는 데 사용할 수있는 여러 가지 호출 가능한 형식이 있습니다. 그러나 모든 경우에 참조 된 메소드 는 공개적으로 볼 수 있어야합니다 . public
키워드가 접두어이거나 아무런 visibility 키워드도없는 경우 메소드가 공개됩니다 (이 경우 메소드의 기본값은 public 임).
객체 메소드 액션 후크
객체 메소드는 클래스의 특정 인스턴스에서 실행됩니다.
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
위의 클래스를 다음과 같이 인스턴스화 한 후,
$my_class_instance = new My_Class();
initialize()
메서드는 일반적으로 $my_class_instance->initialize();
호출하여 객체에서 호출됩니다 $my_class_instance->initialize();
. 메소드를 'init'
init'WordPress 액션에 연결하려면 인스턴스에 대한 참조와 객체 메소드의 이름을 포함하는 문자열을 포함하는 배열을 전달하면됩니다.
add_action( 'init', [ $my_class_instance, 'initialize' ] );
add_action()
이 객체 메소드 내에서 호출되면 $this
의사 변수를 사용할 수도 있습니다 :
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
add_action( 'init', [ $this, 'initialize' ] );
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
클래스 메서드 액션 후크
클래스 메소드는 특정 인스턴스가 아닌 클래스에서 정적으로 실행됩니다. 다음과 같은 클래스가 주어진다면,
class My_Class {
// Initialization function
public static function initialize() {
// (Initialization logic)
}
}
initialize()
메서드는 일반적으로 ::
scope-resolution 연산자를 사용하여 호출됩니다 My_Class::initialize();
예 : My_Class::initialize();
. 정적 클래스 메소드를 WordPress에 연결하는 것은 여러 가지 방법으로 수행 할 수 있습니다.
클래스 이름을 포함하는 문자열과 메소드 이름을 포함하는 문자열로 구성된 배열 사용 :
add_action( 'init', [ 'My_Class', 'initialize' ] );
::
operator를 포함하여 메서드에 대한 전체 참조가 포함 된 문자열 전달 :add_action( 'init', 'My_Class::initialize' );
정적 클래스 메소드 내에서
add_action()
이 호출되면 클래스 이름 대신self
키워드 또는__CLASS__
magic-constant를 사용할 수 있습니다. 이러한 항목의 값이 클래스 상속의 경우 다소 반 직관적이되면 일반적으로 권장되지 않습니다.class My_Class { // Setup function public static function setup_actions() { add_action( 'init', 'self::initialize' ); } // Initialization function public static function initialize() { // (Initialization logic) } }