web-dev-qa-db-ja.com

Wp_enqueue_scriptsをHEADERに強制しますか?

私が取り組んでいるプラグインは、コンテンツが処理される前にjqueryをロードする必要があります。 2010年、2011年、2012年(私は信じています)のようないくつかのストックテーマは、フッターにJSを入れます。

どのようにしてスクリプトをヘッダーにロードさせることができますか(プラグインがこれを必要とすることをプラグインのユーザーに通知します)?

1
Branndon

wp_enqueue_script の通常の動作はスクリプトの出力をheadセクションに入れることです。パラメータ$in_footerはオプションで、デフォルトはfalseです。 wp_enqueue_scriptはデフォルトでこれを防ぎます - その{ here についての追加情報。

3
Nicolai

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をロードしたものが何であっても、スクリプトは常に後でロードされます。

2
Andrew Bartel

たとえば、単純な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;
}
1
TheDeadMedic

wp_enqueue_scriptsのWP参照に従う

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配列で指定されている依存関係があるかどうかを確認する必要もあります。解決後、スクリプトが強制的にロードされるようになります。

どんな汚いハックも試してはいけない、それは悪い習慣です

ハッピーコーディング

0
Rangel Nikolov