WordPress
액션 및 필터
수색…
통사론
- add_action (태그, function_to_call, 우선 순위, num_of_args);
- add_filter (tag, function_to_call, priority, num_of_args);
매개 변수
매개 변수 | 설명 |
---|---|
$ 태그 | (문자열) (필수) $ 함수가 후크되는 작업의 이름입니다. |
$ function | (호출 가능) (필수) 함수 이름 또는 익명 함수가 들어있는 문자열이 필요합니다. 클래스에서 함수를 추가하는 예제를 참조하십시오. |
우선 순위 $ | (int) default = 10. 후크 / 필터에 연결된 함수는 할당 된 우선 순위로 실행됩니다. 다른 액션보다 먼저 코드를 사용하여 우선 순위 = 1을 설정하거나 다른 모든 첨부 된 함수를 우선 순위 = 100으로 설정하는 상황이있을 수 있습니다. 모든 PHP 함수와 마찬가지로 변수에 값을 전달하지 않고 함수를 사용할 수 있습니다 여기서 디폴트 값이 설정되었지만 리턴 된 매개 변수의 수를 변경하려면! |
$ 매개 변수 | (int) default = 1. 연결된 함수에 반환 된 매개 변수의 수입니다. 리턴 된 매개 변수는 후크가 작성된 번호에 따라 달라집니다. 자세한 내용은 apply_filters() 및 do_action() 을 참조하십시오. |
비고
자료 Wordpress 후크
WordPress로 작업하기 시작할 때 개발자에게 혼란을 apply_filters()
것은 apply_filters()
및 add_action()
입니다. 코드에서 이러한 플러그인을 사용하는 플러그인 / 테마를 자주 보게 될 것이며 개념을 이해하지 못한다면 그 플러그인을 사용하기가 어려울 것입니다.
간단히 (아주 간단히 말하면, 프로세스에 대한 워드 프레스로드 순서도를 자세히보십시오), WordPress는 다음과 같은 방법으로로드됩니다 :
- wp-load.php - 함수 등
- mu-plugins - mu-plugins 폴더에있는 모든 파일 - 캐시 된 객체를 제공하는 데 자주 사용됩니다.
- 플러그인 - 특정 순서없이 설치되고 활성화 된 플러그인이로드됩니다.
- 활성 하위 주제 / 상위 주제
- init - 나머지 데이터
- 주형
개발자이고 함수 파일로 작업하는 경우 두 파일 모두 작업중인 파일보다 먼저로드되어 있음을 알 수 있습니다. 즉, 나중에 실행되거나 아직 정의되지 않은 프로세스 (함수를 덮어 쓸 수 없음) 또는 변수를 수정할 수 없습니다. 또한 테마 개발자는 플러그인에 후크하거나 플러그인으로 다른 플러그인이 변수를 덮어 쓸 수 있도록 코드에 후크를 배치 할 수 있습니다. 이제 이것은 혼란 스러울 수도 있지만 거기에 매달려 있습니다.
add_filter()
와 add_action()
을 이해하기 위해서는 add_filter()
hook이 어떻게 생성되는지 살펴야합니다.
$arga= 'hello';
do_action('im_a_hook', $arga );
WordPress에서 위와 같은 문제가 발생하면 im_a_hook
훅에 첨부 된 모든 함수를 호출합니다 (프로세스에 대한 정보는 $wp_filter
를 참조하십시오). 첨부 된 함수에서 $arga
는 첨부 된 함수와 함께 사용할 수 있습니다.
add_action('im_a_hook', 'attached_function');
function attached_function($arga){
echo $arga;
}
이것은로드 프로세스의 특정 시점에서 변수를 수정할 수있는 새로운 기회를 열어줍니다. 앞서 템플릿이 플러그인 / 테마 뒤에로드되었다고 말한 것을 기억하십니까? 하나의 일반적인 플러그인은 나중에 프로세스에서 스크린을 생성하는 do_action
그러나 do_action
의 예가 플러그인에서 발견되는 방법을 문서화하지는 않겠습니다.
do_action( 'woocommerce_after_add_to_cart_button' );
여기에 변수를 전달하지 않는 훅이 생성되었지만 여전히 재미있게 사용할 수 있습니다.
add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');
function special_offer(){
echo '<h1>Special Offer!</h1>;
}
위의 add_action
것이다 echo
특별 제공의 제목 do_action('woocommerce_after_add_to_cart_button')
WooCommerce 화면을 만들 때 어떤 위치를. 그래서 우리는이 훅을 사용하여 html을 삽입 할 수 있습니다. 다른 용도로는 다른 화면으로 리디렉션하는 등이 있습니다.
또한 여러 변수가 함수에 전달 될 수 있습니다. 테마 기능에서이 기능을 사용해보십시오. 사용 가능한 세 가지 매개 변수로 작업하기를 원하기 때문에 마지막 매개 변수를 3으로 설정합니다. 이 값을 2로 변경하면 2 만 반환되고 정의되지 않은 오류가 발생합니다.
add_action('custom_hook', 'attached_function', 10, 3);
function attached_function($a,$b,$c){
var_dump($a);
var_dump($b);
var_dump($c);
}
$arga = 1;
$argb = 2;
$argc = 3;
do_action('custom_hook', $arga, $argb, $argc);
exit;
필터라고하는 또 다른 WP 후크 유형이 있습니다. 필터는 사용법에있는 액션과 다르며, 액션은 변수 만 수신 할 수 있습니다. 분명히 이러한 변수는 함수 범위 내에 있습니다 (Google이 아니라면 PHP 범위가 무엇인지 알아야합니다). 필터는 반환 된 데이터를 다시 전달하므로 변수를 수정할 때 사용할 수 있습니다.
$filter_me= apply_filters('im_a_filter', $variable_to_filter);
위의 내용을 보면, 반환하는 데이터는 변수에 저장된 값이되므로 $filter_me
의 값을 수정할 수 있습니다. 그래서 예를 들어 (이 예제에서 $variable_to_filter
를 $filter_me
로 변경했습니다).
add_filter('im_a_filter', 'attached_function', 100);
function attached_function($filter_me){
$filter_me= 'ray';
return $filter_me;
}
$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);
$filter_me
변수에 'bob ' 대신 'ray' 가 포함되어 있으므로 우선 순위를 100으로 설정 했으므로 사용 후 값을 변경하는 사람이 아무도 없다고 확신 할 수 있습니다 (동일한 후크에서 여러 필터가 실행될 수 있음). 그래서 우리는 apply_filters()
가있는 경우 나중에 프로세스에서 사용되는 변수를 변경할 수 있습니다.
매개 변수를 여러 개 전달할 수도 있지만 매개 변수의 값만 변경할 수 있습니다. 값을 반환해야합니다. 그렇지 않으면 변수에 아무 것도 포함되지 않습니다. PHP를 사용하여 변수에 값 / 배열 / 객체를 지정하는 방법을 이해한다면 이는 분명합니다. 예 :
add_filter('im_a_filter', 'attached_function', 100, 3);
function attached_function($filter_me, $arga, $argb){
$filter_me= 'ray'.$arga.$argb;
$arga= 'you fool';
return $filter_me;
}
$filter_me = 'bob';
$arga = ' middlename';
$argb = ' surname';
$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);
$filter_me
변수에 'ray $filter_me
surname'이 포함 됩니다. 그러나 $arga
? 이것은 여전히 ' $arga
'을 포함하고 있습니다. 우리의 함수 내에서 '당신 바보'라는 $arga
를 변경하면 범위 밖에서 정의 된 값에는 아무런 영향을 미치지 않습니다 (방법, Google 전역 등이 있습니다)
add_action ($ hook_name, $ function, $ priority, $ parameters)
add_filter ($ hook_name, $ function, $ priority, $ parameters);
add_action - init
add_action('init', 'process_post');
function process_post(){
if($_POST)
var_dump($_POST);
}
add_action - init - 익명 함수
add_action('init' , function(){
echo 'i did something';
});
add_action - init - 클래스 객체 내
class sample{
public function __construct(){
add_action('init', array($this, 'samp') );
}
public function samp(){ // must be public!!
echo 'i did something';
}
}
new sample();
정적 클래스 내에서 add_action - init -
class sample{
public static function add_action_func(){
//note __CLASS__ will also include any namespacing
add_action('init', array(__CLASS__, 'samp') );
}
public static function samp(){
echo 'i did something';
}
}
sample::add_action_func();