add_action ( ‘init’) vs add_action ( ‘wp_enqueue_scripts’)을 사용하는 경우 것입니다. 그러나 add_action (

내 테마의 functions.php에서 jquery 가로 드되는 위치 (테마의 다른 스크립트와 함께 바닥 글)를 제어하기 위해 add_action을 호출하고 있습니다.

내가 겪고있는 문제는 add_action ( ‘wp_enqueue_scripts’)을 사용할 때 플러그인이로드되지 않은 경우에만 실행되는 것입니다. 그러나 add_action ( ‘init’) 메소드는 모든 경우에 작동합니다.

이유를 기억할 수는 없지만이 경우 add_action ( ‘wp_enqueue_scripts’)이 선호된다고 생각합니다. 그것이 사실이라면, 모든 경우에 어떻게 작동하게 할 수 있습니까?

functions.php에서

//if(!is_admin()){add_action('init', 'my_theme_init');} //THIS WORKS ALL THE TIME
//add_action('wp_enqueue_scripts', 'my_theme_init'); //THIS ONLY WORKS WHEN NO PLUGINS PRESENT

if(!is_admin())
{
    require_once(TEMPLATEPATH . '/functions_public.php');   
}

functions_public.php에서

function my_theme_init()
{

/* PREVENT DUPLICATE COPIES OF JQUERY FROM PLUGINS
**************************************************/
wp_deregister_script('jquery');

/* LOAD THE LOCAL WORDPRESS COPY OF JQUERY AND THEME CUSTOM SCRIPTS IN THE FOOTER
***********************************************/
wp_register_script('jquery', get_bloginfo('template_directory').'/scripts.mythemescripts.js',false,false,true);

wp_enqueue_script('jquery');

}

add_action ( ‘wp_enqueue_scripts’)을 사용하는 두 번째 방법은 테마에 스크립트 종속성을 작성하는 플러그인이있는 조건에서 실행되지 않습니다.



답변

많은 플러그인 개발자들은 올바른 방식으로 일을하지 않습니다. 올바른 방법에 훅하는 것입니다 wp_enqueue_scripts당신이해야 할 노력하고있다.

그러나 다음은 일반적인 요청에서 실행되는 후크 순서입니다.

  • muplugins_loaded
  • registered_taxonomy
  • registered_post_type
  • plugins_loaded
  • sanitize_comment_cookies
  • setup_theme
  • load_textdomain
  • after_setup_theme
  • auth_cookie_malformed
  • auth_cookie_valid
  • set_current_user
  • 초기화
  • widgets_init
  • register_sidebar
  • wp_register_sidebar_widget
  • wp_default_scripts
  • wp_default_stypes
  • admin_bar_init
  • add_admin_bar_menus
  • wp_loaded
  • parse_request
  • send_headers
  • parse_query
  • pre_get_posts
  • posts_selection
  • wp
  • template_redirect
  • get_header
  • wp_head
  • wp_enqueue_scripts
  • wp_print_styles
  • wp_print_scripts
  • … 훨씬 더

문제는 원래 여러 개발자가 init스크립트를 대기열에 넣기 위해 연결하라는 지시 를 받았습니다. 우리가 wp_enqueue_script갈고리를 갖기 전에 , 그것은 “올바른”일을하는 방법이었고, 연습을 계속하는 튜토리얼은 여전히 ​​인터넷에 떠 다니고 있습니다. 그렇지 않으면 좋은 개발자가 손상됩니다.

기능을 두 부분으로 나누는 것이 좋습니다. 당신의 수행 wp_deregister_script/를 wp_register_scriptinit후크 및 사용 wp_enqueue_scripts당신이 실제로 jQuery를 대기열 때 후크를.

이렇게하면 스크립트를 대기열에 넣을 수있는 “올바른 작업”의 세계를 유지할 수 있으며, 대기열에 추가하기 전에 jQuery를 연결된 버전으로 교체하여 여전히 “잘못된 작업을 수행하는”수백 명의 개발자로부터 사용자를 보호 할 수 있습니다. .

또한 init우선 순위가 높은 후크 를 추가하고 싶을 것입니다 .

add_action( 'init', 'swap_out_jquery', 1 );
function swap_out_jquery() {
    // ...
}


답변

여기에는 서로 관련된 여러 가지 문제가 있습니다.

  1. 스크립트를 대기열에 넣는 데 사용할 올바른 조치 후크는 wp_enqueue_scripts
  2. 를 통해 바닥 글에 스크립트를 인쇄하려면 wp_enqueue_script()설정된, $footer에 매개 변수를true
  3. 당신의 add_action( $hook, $callback )전화는 어떤 것에도 싸여서는 안됩니다; 그들이 직접 실행하게functions.php
  4. 콜백 안에is_admin() 조건부 점검을 넣어야합니다
  5. 어떤 이유로 든 테마에서 핵심 번들 스크립트를 등록 취소해서는 안됩니다. 스크립트 연결이 목적 이더라도 플러그인 지역 입니다.
  6. 당신이 경우 해야한다 JQuery와 등록 취소, 다음 wp_enqueue_scripts입니다 너무 늦게 . 등록 취소 / 등록 코드를에 연결된 콜백으로 분할하십시오 init.
  7. 다른 스크립트 “jquery”를 호출하는 것도 좋은 방법이 아닙니다. 더 나은 방법은 단순히 jQuery대기열에 넣은 다음 사용자 정의 스크립트를로드하는 것입니다.
  8. 콜백에 우선 순위를 두지 말고 플러그인을 재정의하십시오.
  9. get_template_directory()오히려 사용TEMPLATEPATH

함께 모아서:

<?php
function wpse55924_enqueue_scripts() {
    if ( ! is_admin() ) {

        // Dequeue jQuery
        wp_dequeue_script( 'jquery' );

        // Register/enqueue a custom script, that includes jQuery
        wp_register_script( 'mythemescripts', get_template_directory_uri() . '/scripts.mythemescripts.js', false, false,true );
        wp_enqueue_script( 'mythemescripts' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse55924_enqueue_scripts', 99 );

그러나 다시 : 이것은 실제로 최선의 방법이 아닙니다. 더 나은 방법은 코어 jQuery를 등록 취소하는 플러그인 add_action () 콜백을 제거하거나 코어 번들 jQuery를 대체하는 것처럼 무모한 것을하지 않는 플러그인을 사용하는 것입니다.


답변