내 테마의 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_script
온 init
후크 및 사용 wp_enqueue_scripts
당신이 실제로 jQuery를 대기열 때 후크를.
이렇게하면 스크립트를 대기열에 넣을 수있는 “올바른 작업”의 세계를 유지할 수 있으며, 대기열에 추가하기 전에 jQuery를 연결된 버전으로 교체하여 여전히 “잘못된 작업을 수행하는”수백 명의 개발자로부터 사용자를 보호 할 수 있습니다. .
또한 init
우선 순위가 높은 후크 를 추가하고 싶을 것입니다 .
add_action( 'init', 'swap_out_jquery', 1 );
function swap_out_jquery() {
// ...
}
답변
여기에는 서로 관련된 여러 가지 문제가 있습니다.
- 스크립트를 대기열에 넣는 데 사용할 올바른 조치 후크는
wp_enqueue_scripts
- 를 통해 바닥 글에 스크립트를 인쇄하려면
wp_enqueue_script()
설정된,$footer
에 매개 변수를true
- 당신의
add_action( $hook, $callback )
전화는 어떤 것에도 싸여서는 안됩니다; 그들이 직접 실행하게functions.php
- 콜백 안에
is_admin()
조건부 점검을 넣어야합니다 - 어떤 이유로 든 테마에서 핵심 번들 스크립트를 등록 취소해서는 안됩니다. 스크립트 연결이 목적 이더라도 플러그인 지역 입니다.
- 당신이 경우 해야한다 JQuery와 등록 취소, 다음
wp_enqueue_scripts
입니다 너무 늦게 . 등록 취소 / 등록 코드를에 연결된 콜백으로 분할하십시오init
. - 다른 스크립트 “jquery”를 호출하는 것도 좋은 방법이 아닙니다. 더 나은 방법은 단순히 jQuery 를 대기열에 넣은 다음 사용자 정의 스크립트를로드하는 것입니다.
- 콜백에 우선 순위를 두지 말고 플러그인을 재정의하십시오.
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를 대체하는 것처럼 무모한 것을하지 않는 플러그인을 사용하는 것입니다.