do_action과 add_action의 차이점


20

이 질문은 잘못되었을 수도 있습니다. 확실하지 않습니다. 나는 이것에 대해 명확하지 않기 때문에.

add_action함수를 지정된 함수에 연결하는 데 사용된다는 것을 알고 있습니다. 예를 들어 add_action('wp_head'.'myfunc');이제 코드를 입력 한 myfunc내용이에서 실행됩니다 wp_head(). 이것은 분명하지만 do_action그것이 무엇 을 의심하고 있습니까?

나는 이미 사용 가능한 hooks (wp_head, wp_footer, .. etc)와 같이 우리 자신의 후크를 만드는 데 사용된다고 생각합니다. 올 바르면 누구나 간단한 예를 들어 간단한 이해할 수있는 대답을 보여줄 수 있습니까?

인터넷의 차이점을 시도했지만 모두 add_action과 add_filter의 차이점을 가리키고 있습니다. 나는 이것을 명확히하고 싶기 때문에 거기에 가고 싶지 않습니다.

아무도 나를 도울 수 있습니까?

질문 POST 후 수정

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

플러그인에서 이것을 시도했지만 경고 메시지가 나타나지 않았습니다.

그러나 내가 같은 기능을 연결하면 wp_head제대로 작동합니다.

/******************working****************/
add_action('wp_head','custom_register');

콜백을 등록한 do_action('custom'); 전화하면 어떻게됩니까 ? 그리고 jQuery가로드되었는지 확인하십시오.
fuxia

백엔드 나 프론트 엔드에서 경고 메시지를받지 못했습니다
sun

jQuery가로드됩니다. 내가 같은 기능을 연결하면 wp_head제대로 작동하지만custom
sun

Sun, 나는 당신의 원래 질문이 toscho에 의해 답변되었다고 생각하며 이것을 해결 된 것으로 표시해야합니다. 편집 # 3과 # 4는 새로운 Question 에 속합니다 .
brasofilo

답변:


13

do_action( 'unique_name' )자신 만의 액션을 만드는 데 사용하십시오 .

이를 사용 하여 플러그인에 대한 API 를 제공 할 수 있으므로 다른 플러그인은 사용자 정의 조치에 대한 콜백을 등록 할 수 있습니다. 예 : 플러그인에서 do_action을 호출해야합니까?

그러나 테마에서도 사용자 정의 조치 (또는 필터)를 사용할 수 있습니다. 예 : 사용자 정의 섹션을 WordPress 테마로 구현하는 가장 좋은 방법

또한 플러그인과 테마가 함께 작동하도록 결합 할 수 있습니다. 예 : 테마에서 플러그인의 메소드를 사용 가능하게 만드는 방법은 무엇입니까?

요약 : add_action( 'foo' )콜백을 등록하고 등록 된 콜백을 do_action( 'foo' )실행합니다.


내가 얻은 도움에 대한 감사는 주로 API 목적입니다. 샘플을 시험해 보았지만 효과가 없었습니다. 문제가 있습니까? 내 편집 @toscho
sun

이것을 상속과 같은 다른 사례로 말할 수 있습니까? 수업을 확장하고 재정의하는 intead 우리는 이런 식으로 가고 있습니다. 이 올바른지?
태양

@sun Hm, 그렇습니다. 그러나 두 가지 접근법을 결합 할 수 있습니다 .
fuxia

1

이것은 내 추측이므로, 더 잘 알고 있다면 내 추측을 업데이트 할 수 있도록 의견을 말하십시오.

플러그인 코드가 이전에 실행 wp_head()되었습니다 (추가 된 작업을 호출한다고 가정 할 수 있음). 당신이 때 add_action('wp_head','custom_register'), 당신은 PHP를 말하고있다 (미래에) 때 do_action('wp_head')호출, 호출 custom_register()뿐만 아니라. add_action('custom','custom_register')코드 호출에서도 마찬가지입니다. 코드에서 볼 수 있듯이 호출 do_action('custom')은 이미 이루어졌으며 호출 되었을 때 아직 추가 된 작업이 없습니다. 이것이 콜백을 등록한 do_action('custom') 전화 할 때 Toscho가 어떻게되는지 물어 보는 이유 입니다. 백엔드와 프론트 엔드에 대한 귀하의 답변은 모호합니다. 다음 코드에서 마지막 두 줄을 바꾸면 작동한다고 생각합니다.

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.

0

do_action: 작업 후크 를 등록하는 동안 add_action: 등록 된 후크에 콜백 기능추가합니다 .

템플릿에서 사이드 바 전에 무언가를 인쇄하고 싶다고 가정 해보십시오.

  1. 를 통해 템플릿 파일에 작업 후크 를 추가합니다 .index.php<?php add_action('bp_sidebar_left'); ?>
  2. 이제 functions.php파일 에서 후크에 콜백 함수를 추가하여 원하는 것을 인쇄 할 수 있습니다.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }


-1

아래와 같이 사용해야합니다 :

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect

그것은 나를 위해 노력하고 있습니다
user112289의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.