私が取り組んでいるプラグインは、コンテンツが処理される前にjqueryをロードする必要があります。 2010年、2011年、2012年(私は信じています)のようないくつかのストックテーマは、フッターにJSを入れます。
どのようにしてスクリプトをヘッダーにロードさせることができますか(プラグインがこれを必要とすることをプラグインのユーザーに通知します)?
wp_enqueue_script
の通常の動作はスクリプトの出力をheadセクションに入れることです。パラメータ$in_footer
はオプションで、デフォルトはfalse
です。 wp_enqueue_script
はデフォルトでこれを防ぎます - その{ here についての追加情報。
Wp_enqueue_script()の3番目のパラメータを使用すると、エンキューしているスクリプトの依存関係、つまり実行に必要な他のスクリプトを宣言できます。
add_action( 'wp_enqueue_scripts', 'include_script_that_depends_on_jquery' );
function include_script_that_depends_on_jquery() {
wp_enqueue_script( 'my_script.js', '/path/to/my_scripts.js', array( 'jquery' ) );
}
そのように、どんなテーマ、プラグイン、jqueryをロードしたものが何であっても、スクリプトは常に後でロードされます。
たとえば、単純なjQuery( "body")が必要な場合は、css( "background-color"、 "red");体の中のショートコードの中から実行したのですが、できません。私のショートコードは[body color = red]ですが、jqueryがフッターまでロードされていないとしましょう。そうすれば私のコードは機能しません。
ショートコードハンドラでHTMLプレースホルダ要素またはJavaScript変数を返し、jQueryを「実行する」別の関数を使ってwp_footer
にフックすることができます。
function wpse_139154_shortcode( $atts ) {
// Awesome code
wp_enqueue_script( 'jquery' ); // Will output in the footer if not already in the head
add_action( 'wp_footer', 'wpse_139154_shortcode_script', 100 ); // Ensure we run after wp_print_footer_scripts
return <<<html
<script>
var arguments = arguments || {}; arguments.backgroundColor = "{$atts['color']}";
</script>
html;
}
function wpse_139154_shortcode_script() {
echo <<<html
<script>jQuery( "body" ).css( arguments );</script>
html;
}
wp_enqueue_script( string $handle, string $src = false, array $deps = array(), string|bool|null $ver = false, bool $in_footer = false )
最後のパラメータは、スクリプトがロードされる場所を決定します。彼の行動を変えることができるいくつかの思わぬ障害があります! function.phpファイルからこの行を見つけてコメント付け/削除してください
remove_action('wp_head', 'wp_print_scripts');
remove_action('wp_head', 'wp_print_head_scripts', 9);
remove_action('wp_head', 'wp_enqueue_scripts', 1);
add_action('wp_footer', 'wp_print_scripts', 5);
add_action('wp_footer', 'wp_enqueue_scripts', 5);
add_action('wp_footer', 'wp_print_head_scripts', 5);
この6つのアクションの目的は、JavaScriptコードを自動的にページフッターに移動して、wp_enqueue_scriptsの最後のパラメータを無効にすることです。このアクションを削除できない場合は、それらの優先順位を変更できます。例ごとに5から9999まで。優先順位を付けてプレイして、自分に合ったものを見つけましょう。
また、$ deps配列で指定されている依存関係があるかどうかを確認する必要もあります。解決後、スクリプトが強制的にロードされるようになります。
どんな汚いハックも試してはいけない、それは悪い習慣です
ハッピーコーディング