フッターにJavaScriptファイルをいくつかロードしたいのですが。私はそのようにfunctions.php
でそれを達成しようとしました:
function my_init() {
// LOAD JQUERY
wp_deregister_script('jquery');
wp_register_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',$deps = array(),$in_footer = true);
wp_enqueue_script('jquery');
// LOAD STUTS
wp_register_script('stuts',get_bloginfo('template_url') . '/js/spss-tutorials-custom-functions.js',$deps = array('jquery'),$in_footer = true);
wp_enqueue_script('stuts');
// CONDITIONALLY LOAD MATHJAX
wp_register_script('mathjax','//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML',$deps = array(),$in_footer = true);
$url = explode('?', 'http://'.$_SERVER["HTTP_Host"] . $_SERVER["REQUEST_URI"]);
$ID = url_to_postid($url[0]);
$mathjax = get_post_meta($ID,'mathjax',true);
if($mathjax == 'y'){
wp_enqueue_script('mathjax');
}
}
add_action('init', 'my_init');
しかし、すべてのスクリプトがまだ私のヘッダーに読み込まれています。
私は here 、 here 、 here の解決策を試しましたが、問題は解決しません。
私する持っている
<?php wp_footer(); ?>
</body>
私のfooter.php
ファイルに。助言がありますか?
まず最初に、コールバックをwp_enqueue_script
に追加しながら、init
をフックしています。
例:
add_action( 'wp_enqueue_script', function() {
wp_deregister_script( 'jquery' );
// Rest of logic
} );
また、コアで使用されている正しいバージョンを使用することをお勧めします。私は知っています、これを常に見ているのは面倒で、資産/依存関係を監視したいと思う人はいません。幸いなことに、すでにコアに存在している情報を使用することができます。資産に必要な依存関係についても同じことが言えます。例:
add_action( 'wp_enqueue_script', function() {
$version = $GLOBALS['wp_scripts']->registered['jquery']->ver;
$protocol = 'sprintf( 'http%s://', is_ssl() ? 's' : '' );
$dependencies = $GLOBALS['wp_scripts']->registered['jquery']->deps;
wp_enqueue_script(
'jquery',
"{$protocol}cdn.example.com",
$dependencies,
$version,
TRUE
);
} );
すでに登録されているスクリプトをフッターに移動するより簡単な方法もあります。スクリプトレジストリ内の情報を直接編集します。次の(MU)プラグインを考えてください。
<?php
/* Plugin Name: Moves registered scripts to the footer */
add_action( 'wp_enqueue_scripts', function() {
foreach ( apply_filters( 'wp_scripts.footer', [] as $script )
$GLOBALS['wp_scripts']->add_data( $script, 'group', 1 );
}, PHP_INT_MAX -1 );
これで、上記のフィルタに配列を追加して、スクリプトをフッターに移動できます。
add_filter( 'wp_scripts.footer', function( Array $scripts ) {
return [
'jquery',
# Other scripts
];
} );
あなたのコードに関して注意すべき非常に奇妙な(しかし動作する)ものも複数あります。
myFunction( $var = 'foo' )
を使う必要はありません。値を追加するだけです。//url.tld/script.js
を使用すると、クライアントは移動先のルート(HTTPSとHTTP)を決定できます。これは、分散コードには問題ないかもしれません(それでも、プロトコルを事前に取得して使用する方が良いでしょう)。それは速くて、利用可能なHTTPSがあれば、それでは神のために:それを使ってください!$_SERVER
に頼ることはあなたのスクリプトが常にクライアントを介してのみ実行されるのであれば大丈夫です。コマンドラインでは、この配列のデータを使用することは信頼できません。ある場合にはそれは変化し、他の場合にはそれは設定されていない。 WPには代わりに使用できるフォールバックがいくつかあります。