wp init hook을 사용하여 다른 후크를 호출 하시겠습니까?


11

WordPress 테마 또는 플러그인 개발에 따라 좋은 습관인지 알고 싶습니다.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

감사

답변:


16

일반적으로 : 그렇습니다. 전용 후크가 자신의 코드를 시작할 때까지 기다리십시오. 전역 네임 스페이스에 객체 인스턴스를 던지지 마십시오 . 그러나 init거의 필요하지 않습니다.

당신은 가능한 한 늦게 연결합니다. 첫 번째 코드가 실행되는 wp_head경우 이전 후크를 사용하지 마십시오. 당신은 할 수 후크 계단식 :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

init후크에 관하여 : wp_loaded대신 사용하십시오 . 그것은 호출 된 init이후 ms_site_check()에 실행됩니다 . 이렇게하면 다중 사이트 설치의 잘못된 하위 사이트에서 플러그인을 실행하지 않아도됩니다. 다른 모든 것은 동일합니다.


3
+1 wp_loaded및 MS 정보
kaiser

wp_loaded 내부의 다른 모든 후크를로드하거나 별도로로드하는 것이 더 나은 귀하의 응답에 여전히 감사드립니다. wp_loaded에 훅을 추가하면 admin_init 또는 admin_menu 후에 훅되는 대신 더 빨리 훅 될 것입니까?
at

계단식 고리는 문제가되지 않습니까?
at

아니요, 왜 그래야합니까? 첫 번째가 유용한 경우에만 두 번째 후크를 호출하십시오.
fuxia

3

다음과 같은 이유로이 방법 의 이점을 볼 수 없습니다 .

등록시 콜백 함수가 호출되지 않습니다

add_actionadd_filter함수는 전역 변수에 항목 추가 $wp_filter모든 필터와 행동을 보유하고 있습니다. 출처를 참조하십시오 . 함수를 호출하지 않습니다. 코드는 and 가 호출 될 때 (적절한 후크 이름으로) 실행 되며 , 이러한 후크가 있어야하는 위치에서 매우 늦게 발생 합니다.do_actionapply_filters

그렇게하면 전역 변수 $wp_filter가 커지면서 더 많은 메모리가 필요 해질 것이라고 말할 수 있습니다 . 그러나 새로운 기능을 만드는데도 같은 문제가 있다고 생각합니다.

코드 구성

하나의 기능에 모든 것을 넣으면 테마 / 플러그인의 모든 파일에있는 모든 후크를 기억해야합니다. 당신 은 이런 식으로하지 않을 것입니다 :

  • in header.php: 헤더에서 발생하는 일에 대한 후크 및 콜백 기능 추가 (메뉴, 스크립트 등록 등)
  • in content.php: 컨텐츠 필터링을위한 후크 및 콜백 함수 추가
  • admin-menu.php: 관리 메뉴를 추가하기위한 후크 및 콜백 기능 추가

(해당 파일이 테마 / 플러그인에 있다고 가정)

그 대신 다음을 수행해야합니다.

  • 만 콜백 기능을 넣어 header.php, content.php,admin-menu.php
  • 다른 파일에서 분리 된 함수의 모든 후크를 넣습니다.

=> 그러면 header.php파일 의 내용을 볼 때 어떤 일이 발생하는지 알기가 어렵습니다 . 이러한 콜백이 언제 발생하는지 알기 위해 검색해야합니다.

테마 / 플러그인에 여러 클래스가있을 때의 상황을 생각해보십시오. 모든 수업의 모든 고리를 한 곳에 두십니까? 또는 각 클래스에는 모든 후크를 보유하는 랩퍼 함수가 있습니까? 너무 중복입니다!

이러한 이유로, 나는 그것이 개인적인 스타일이라고 생각합니다 :). 하이브리드와 같은 일부 프레임 워크가 말한 것을 봅니다. 때로는 그 프레임 워크를 파고 들기가 어렵습니다!

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