수색…


통사론

  • 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는 다음과 같은 방법으로로드됩니다 :

  1. wp-load.php - 함수 등
  2. mu-plugins - mu-plugins 폴더에있는 모든 파일 - 캐시 된 객체를 제공하는 데 자주 사용됩니다.
  3. 플러그인 - 특정 순서없이 설치되고 활성화 된 플러그인이로드됩니다.
  4. 활성 하위 주제 / 상위 주제
  5. init - 나머지 데이터
  6. 주형

개발자이고 함수 파일로 작업하는 경우 두 파일 모두 작업중인 파일보다 먼저로드되어 있음을 알 수 있습니다. 즉, 나중에 실행되거나 아직 정의되지 않은 프로세스 (함수를 덮어 쓸 수 없음) 또는 변수를 수정할 수 없습니다. 또한 테마 개발자는 플러그인에 후크하거나 플러그인으로 다른 플러그인이 변수를 덮어 쓸 수 있도록 코드에 후크를 배치 할 수 있습니다. 이제 이것은 혼란 스러울 수도 있지만 거기에 매달려 있습니다.

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();


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow