functions.php, 위젯 및 플러그인 사이에서 가장 먼저로드되는 것은 무엇입니까?


78

고객이 자신이 사용하는 특정 회전식 플러그인을 위젯화할 수 있는지 묻습니다. 즉, 플러그인의 함수를 호출하는 functions.php 내에 위젯을 만들어야합니다. 즉, functions.php 파일이로드 될 때 WordPress에서 함수를 사용할 수 있도록 플러그인의 코드를 먼저로드해야합니다. 작동할까요?

답변:


185

플러그인은 테마 바로 전에로드됩니다 (예, 이것을 사용하는 변명을 찾고 있습니다)

여기에 이미지 설명을 입력하십시오

그러나 코드 실행 지점으로 생각하는 것은 잘못입니다. 대부분의 경우 모든 것이 init후크 보다 먼저 후크되고 실행되어야합니다 . 코덱스 위젯 등록에 register_widget()따라에 연결해야합니다 widget_init.

이 경우로드 순서는 중요하지 않으므로 시간 위젯에 의해로드 된 모든 것이 필요할 때마다 필요합니다.


3
WP 코어로드는 전혀 의미가 없습니다.
gagarine

7
2016 년에 차트를 업데이트 할 수 있습니까? ;-)
jgraup

9
@jgraup 당신은 WordPress의 핵심에서 변화하는 것처럼 말합니다 ... :)
Rarst

1
@Rarst, touché ;-)
jgraup

2
@IsaacLubow 그렇습니다. 동일한 핵심 부하 청크가 항상 모든 요청에 ​​관련되어 있음을 알 수 있으므로 둘 이상의 열에있는 항목이 해당 컨텍스트에 대해 실행됩니다.
Rarst

16

흥미로운 접근 방법 중 하나는 일련의 실행으로 파일에 대한 모든 후크를 나열하는 것입니다.

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

그리고 당신은 다음과 같은 결과를 얻을 것입니다 :

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

전체 목록은 WPSO 게시물 당 30.000 자 제한에 맞지 않기 때문에 많은 작업 후크를 제거했습니다.

위 코드를 플러그인 안에 넣습니다. 당신이 테마에서 functions.php그렇게하면 잡을 수 없습니다 plugins_loaded. 서로 테마 전에 플러그인이로드되었음을 증명합니다.

이 검사의 장점은 많지만 호출 할 페이지 템플릿마다 또는 대시 보드에있는 경우 출력이 다를 수 있습니다.

나는 단순히 /?p=1Hello World 페이지 에서 이것을 불렀다 .

단일 플러그인을 활성화하지 않은 경우이 코드를 mu-plugins폴더에 넣을 수 있습니다 .

WP FS API 를 사용하는 것이 더 나을 수 있지만이 방법은 정말 간결합니다.


내부 wp-admin 플러그인은 테마 이후 또는 설치 순서대로로드되고 ... 프론트 엔드 플러그인은 테마 전에로드됩니다.
Vishal Kumar Sahu

3

플러그인의 .php 파일 안에 위젯을 가질 수 있습니다 (그리고 그들이 사용할 수있는 공유 전역 변수를 가질 수도 있습니다). 다음은 내가 잠시 우연히 발견 한 샘플 코드 가있는 자습서입니다 .

또한, 여기의 전형적인 요청시 실행하는 행동의 목록 실행 순서는. # 2와 # 10은 플러그인이 먼저로드 될 것을 제안합니다. functions.php에 대해 확실하지 않습니다.


1
테마 파일보다 먼저 플러그인이로드됩니다. 플러그인에 원하는 위젯이 아닌 코드가 포함 된 경우 테마의 functions.php에서 위젯을 정의 할 수 있습니다.
goldenapples
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.