it-swarm-ko.tech

필터와 액션 후크의 차이점은 무엇입니까?

최근에 플러그인 API에 대해 좀 더 깊이 살펴 봤는데액션과 필터 후크 사이에 실제로 차이점이 무엇인지 궁금합니다. 둘 다 매개 변수로 데이터를받는 이벤트이며 둘 다 동일한 작업을 수행 할 수있는 것처럼 보입니다.

분명히 액션이 발생했을 때 액션이 호출되고 데이터가 조작 될 때 필터가 호출되는 것을 볼 수 있지만 의미있는 이름 지정 차이 인 것처럼 보입니다.

의미론과 그것들이 사용되는 것 외에, 그들 사이에는 어떤 실제적인 차이가 있습니까?

49
Sruly

안녕 @ Sruly :

당신은 당신 자신의 질문에 거의 대답했지만, 조금 더 자세히 설명하겠습니다.

액션 훅

Actions Hooks WordPress 코어 또는 일부 플러그인 또는 테마가 특정 지점에서 코드를 삽입하고 다음 중 하나 이상을 수행 할 수있는 기회를 제공 할 때 사용하기위한 것입니다.

  1. 응답 버퍼에 echo to 일부 HTML 삽입 또는 다른 내용을 사용하십시오.
  2. 전역 변수 상태 수정 하나 이상의 변수 및/또는
  3. 매개 변수 수정 후크 함수에 전달됨 (후자는 변수 전달을 지원하지 않기 때문에 후크가 do_action_ref_array() 대신 do_action()에 의해 호출되었다고 가정 할 때 by-reference.)

필터 후크

필터 후크액션 후크와 매우 유사하게 작동하지만 의도 된 용도는 값을 받고 수정 된 버전의 값을 반환하는 것입니다. 필터 후크는 또한 후크가 호출 될 때 수행해야하는 작업을 가정하여 전역 변수를 수정하거나 일부 HTML을 생성하기 위해 액션 후크처럼 사용할 수 있습니다. Action Hooks에서 걱정할 필요가없는 Filter Hooks에 대해 매우 중요한 것 중 하나는 Filter Hook를 사용하는 사람이 must return ( ) 전달 된 첫 번째 매개 변수입니다. 흔한 초보자 실수는 그 가치를 잊는 것입니다!

추가 매개 변수를 사용하여 필터 후크에 컨텍스트 제공

제쳐두고 필터 후크는 이전 버전의 WordPress에서 하나의 매개 변수 만 받기 때문에 방해가된다고 생각했습니다. 즉, 수정할 수는 있지만 컨텍스트를 제공하기 위해 두 번째 또는 세 번째 매개 변수는 없습니다. 그러나 최근에는 긍정적으로 WordPress 핵심 팀이 더 많은 컨텍스트를 발견 할 수 있도록 필터 후크에 추가 매개 변수를 추가 한 것으로 보입니다. 좋은 예는 posts_where 훅입니다. 몇 가지 버전은 현재 쿼리의 "where" 클래스 SQL 인 하나의 매개 변수 만 허용하지만 이제 where 절 and의 현재 인스턴스에 대한 참조를 모두 허용합니다. 후크를 호출하는 WP_Query 클래스.

진짜 차이는 무엇입니까?

실제로 Filter Hooks는 Action Hooks의 상위 집합입니다. 전자는 후자가 할 수있는 일을 할 수 있으며 개발자가 필터 후크로 수행하는 액션 후크로 값을 반환 할 책임이 없지만 조금 더 할 수 있습니다.

지도 및 전신 의도 제공

그러나 그것은 아마도 중요한 것이 아닙니다. 중요한 것은 개발자가 액션 훅과 필터 훅을 사용하기로 선택하거나 그 반대의 경우도 전도 의도 따라서 지도 제공 또는 후크를 사용하는 플러그인 개발자. 본질적으로 그들은 "당신을 부르고, 당신이해야 할 일을하겠습니다"또는"수정하기 위해이 값을 전달하지만 다시 전달해야합니다."

그래서 궁극적으로 훅 유형의 선택에 의해 제공된 지침은 구별의 진정한 가치라고 생각합니다. 어쨌든 IMO.

이것이 도움이되기를 바랍니다!

58
MikeSchinkel

add_action() 핵심 함수의 소스를 보면 add_filter() 함수의 래퍼 일뿐입니다 ...

그리고 do_action() 핵심 함수를 살펴보면 apply_filters() 핵심 함수와 매우 비슷합니다. 중요한 차이점 하나가 있습니다. 즉, 값을 반환하지 않습니다.

그럼이게 무슨 뜻입니까? 액션은 필터와 비슷하지만 액션은 값을 반환하지 않으므로 데이터를 수정할 수 없습니다. 단순히 필터 메커니즘을 복사하고 값을 반환하지 않고 WordPress의 액션 메커니즘을 만드는 것이 간단하다는 것을 보여줍니다. 기본적으로 액션으로 할 수있는 것은 단순히 값을 수정하지 않고 함수를 실행하는 것입니다.

11
trusktr

간단한 단어로.

Actions 출력을 실행하는 PHP 함수입니다.

Filters 는 출력을 반환하는 PHP 함수입니다.

업데이트 : 코드를 수정하지 않고 액션과 필터를 사용하는 플러그인을 확장 할 수 있습니다. 우리 자신의 테마 또는 플러그인에 필터와 액션을 추가합니다.


사용하는 방법?

동작:

테마 functions.php 파일의 간단한 예제를 아래에서 확인하십시오.

  1. 예제 1 : (단순 PHP 예)
 function test () {
 echo "출력"; 
} 
 
 test (); 

위의 프로그램은 출력을 출력합니다 :

산출

[참고 : 여기 test ()는 단순히 함수를 호출합니다. 그리고 콜백 함수 'test'를 실행하십시오.]


  1. 예 2 : (간단한 행동 사용)
 function test1 () {
 echo "출력"; 
} 
 add_action ( 'test', 'test1'); 
 
 do_action ( 'test'); 

위의 프로그램은 출력을 출력합니다 :

산출

[참고 : 여기에서 do_action('test')은 함수 호출과 같이 작동합니다. 그리고 콜백 함수 'test1'을 실행합니다.]


  1. 예 3 : (또 다른 동작 사용)
 function test2 () {
 echo "Test 2"; 
} 
 add_action ( 'test', 'test2', 1); 
 
 function test1 () {
 echo "Test 1"; 
} 
 add_action ( 'test', 'test1', 2); 
 
 do_action ( 'test'); 

위의 프로그램은 출력을 출력합니다 :

 테스트 2 테스트 1 

[참고 : 여기에서 do_action('test')은 함수 호출과 같이 작동합니다. 그리고 우선 순위에 콜백 함수를 실행하십시오.

콜백 함수 'test1'의 우선 순위는 2이고 'test2'의 우선 순위는 1입니다.

우선 순위가 'test1'(우선 순위 1) 및 'test2'(우선 순위 2) 인 경우 출력은 다음과 같습니다.

 테스트 1 테스트 2 

  1. 예제 4 : (타사 지원) 아래 코드를 functions.php에 추가하십시오
 function test1 () {
 do_action ( 'test_before'); 
 echo "Test 1"; 
 do_action ( 'test_after'); 
 } 
 add_action ( 'test', 'test1'); 
 
 do_action ( 'test'); 

위의 프로그램은 출력을 출력합니다 :

 테스트 1 

이제 샘플 플러그인을 만들어 타사 개발자에게 어떻게 작동하는지 확인하십시오.

  1. /wp-content/plugins/ 디렉토리에 'simple'폴더를 만듭니다.
  2. 'simple.php'파일을 만들고 아래 코드를 추가하십시오.
[*. 
 * 플러그인 이름 : 간단한 플러그인 
 */
 function test_callback_function () {
 echo "플러그인으로부터"; 
} 
 add_action ( 'test', 'test_callback_function'); 

이제 WordPress 관리 대시 보드에서 간단한 플러그인 을 활성화하십시오.

플러그인 메뉴로 이동하여 활성화하십시오.

위의 프로그램을 활성화 한 후 출력을 출력하십시오 :

 테스트 1 플러그인에서 

[참고 : 플러그인 액션의 우선 순위를 1에서 9까지 추가하면 다음과 같은 결과가 출력됩니다.

 pluginTest 1에서 

왜냐하면, WordPress는 모든 추가 작업에 대해 10 priority by default를 고려하기 때문입니다.]

필터

아래의 예를 확인하십시오.

단순 PHP 예 :

 $ data = array ( 'one', 'two'); 
 print_r ($ data); 

위의 프로그램은 출력을 출력합니다 :

 배열 ([0] => one [1] => two) 
  1. 예제 1 : (필터의 간단한 사용)
[add_filter ( 'my_filter_name', array ( 'one', 'two')); 
 print_r ($ data); 
 
 add_filter ( ' my_filter_name ', function ($ old_data) {
 배열 반환 ('three ','four '); 
}); 

위의 프로그램은 출력을 출력합니다 :

 배열 ([0] => three [1] => four) 

여기서는 필터 my_filter_name를 추가하고 테마/플러그인 파일을 변경하지 않고 array( 'one', 'two' )을 사용하여 기존 출력 array( 'three', 'four' )을 변경합니다.


4
maheshwaghmare