私のテーマの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')を使用する2番目の方法は、テーマへのスクリプト依存関係を書き出すプラグインが存在する条件では実行されないようです。
多くのプラグイン開発者は物事を正しいやり方でやっていません。 right の方法はあなたがやろうとしているようにwp_enqueue_scripts
にフックすることです。
しかし、これは典型的なリクエストで実行されるフックの順序です。
問題は、何人かの開発者がもともと自分のスクリプトをエンキューするためにinit
にフックするように言われたということです。私たちがwp_enqueue_script
フックを持っていた前に、それは物事を行うための「正しい」方法でした、そして練習を永続させるチュートリアルはまだインターネット上であちこちに浮遊しています。
私のお勧めは、あなたの機能を2つの部分に分割することです。 init
フックでwp_deregister_script
/wp_register_script
を行い、実際にjQueryをエンキューするときはwp_enqueue_scripts
フックを使用してください。
これはあなたのスクリプトをエンキューするために "正しくやっている"という世界にあなたを保ち、それらをキューに追加する前にあなたの連結バージョンの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()
条件付きチェックをあなたのコールバックの中に置くべきですwp_enqueue_scripts
は遅すぎます。登録解除/登録コードをinit
にフックされたコールバックに分割します。TEMPLATEPATH
ではなくget_template_directory()
を使うすべてを一緒に入れて:
<?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を置き換えるのと同じくらい無意味なことをしないプラグインを使用することです。