jQueryおよびJavaScriptファイルを正しく含める方法


16

私は今、次のコードでそれをやっています:

function uw_load_scripts() {
    // De-register the built in jQuery
    wp_deregister_script('jquery');
    // Register the CDN version
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
    // Load it in your theme
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_enqueue_scripts', 'uw_load_scripts' );

これは機能しますが、これをすべての人、または管理者以外のすべての人に対して行う必要があります(したがって、バックエンドはWordPressバージョンを使用しますか?):

if (function_exists('load_my_scripts')) {  
function load_my_scripts() {  
    if (!is_admin()) {  
    wp_deregister_script( 'jquery' );  
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
    wp_enqueue_script('jquery');   
    }  
}  
}  
add_action('init', 'load_my_scripts');

このバージョンは実際にはまったく機能しません。Googleのバージョンではなく、WordPressのjQueryバージョンを取得しています。

したがって、WordPressに含まれているjQueryの登録を完全に解除する必要がありますか?

また、正しい方法で自分のスクリプト(スライダースクリプト、modernizr、および独自のcustom.js)を追加するにはどうすればよいですか?私はこれをfunctions.php経由でも行うべきだと思いますが、私は今やっているようにヘッダーではありませんが、私はそれをどうするかわかりません。

回答:


20

第一の経験則:テーマ、プラグイン、またはコア自体がバージョンの変更によって破損しないことが確実でない限り、コアバンドルされたスクリプトを登録解除して他のバージョン置き換えないでください。本当に、コアバンドルされたスクリプトの代替バージョンがどうしても必要な場合を除き、コアにバンドルされているものを使用してください。

第二に、wp_enqueue_scriptsスクリプトの登録とエンキューではなく、フックすることを強くお勧めしますinit。(で動作しますがinit他の人と一緒にプレイするという観点からは、最も意味的に正しいフックを使用するのが最善です。)

第三に、独自のカスタムスクリプトをキューに入れるには、上記と同じ方法を使用します。

<?php
function wpse45437_enqueue_scripts() {
    if ( ! is_admin() ) {
        $script_path = get_template_directory_uri() . '/js/';
        // Enqueue slider script
        wp_enqueue_script( 'wpse45437_slider', $script_path . 'slider.js', array( 'jquery' ) );
        // Enqueue modernizr script
        wp_enqueue_script( 'wpse45437_modernizr', $script_path . 'modernizr.js', array( 'jquery' ) );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse45437_enqueue_scripts' );
?>

エンキューに必要なスクリプトを追加するだけです。


4
絶対に必要なものに +1 !あまりにも多くの(通常は「プレミアム」)テーマがjQueryの古いバージョンを登録しています。プラグインが壊れます。
スティーブンハリス

このスクリプトを関数ファイルに追加すると(PHP宣言は既に存在するため)、「Httpエラー500(内部サーバーエラー)」が表示されます。どこかにエラーがありますか?
ヨハン・ダール

はい; wp_enqueue_script()呼び出しに構文エラーがありました。
チップベネット

おかげさまで動作します!ただし、ヘッダーには引き続き出力されます。それがフッターのどこにあるかは良くありませんか?もしそうなら、コードを修正することができますか?
ヨハン・ダール

確かにフッターに入れることができます。の$in_footer呼び出しでパラメータをtrueに設定するだけwp_enqueue_script()です。
チップベネット

4

これがお役に立てば幸いですwp_enqueue_scripts。詳細についてはコーデックスをご覧ください。

  1. エンキューに使用initしないでください。使用フロントエンドのもののためと管理者側のために。あなたは使用することができますして登録しても、スクリプトを。wp_enqueue_scriptsadmin_enqueue_scriptsinit
  2. フックwp_enqueue_scriptsはフロントエンドでのみ起動し(ログインページでは起動しません)-をチェックする必要はありませんis_admin()
  3. 特別な理由がない限りfunctions.phpテーマ用またはプラグイン内でスクリプトを登録およびキューに登録することをお勧めします。あなたは単に置く:

     function myprefix_load_scripts() {
       // Load scripts here
     }
     add_action( 'wp_enqueue_scripts', 'myprefix_load_scripts' );
  4. ショートコードが使用されているときにスクリプトwp_enqueue_scriptをキューに入れることが目的の場合、ショートコードコールバックで使用して、必要な場合にのみキューに入れることをお勧めします(これは3.3以降のフッターに出力されます)。

  5. 管理者側で既存のjQueryを再登録しないでください。あなたは何かを壊すかもしれない:D。

  6. プラグイン、既存のjQueryを再登録しないでください

  7. jQueryを再登録することの長所と短所を比較検討する必要があります。たとえば、古いバージョンを登録すると、一部のプラグインが破損する場合があります(現在ではなく、将来的に...)


1
広告5)再登録は重要ではありません。これが、エンキューおよび登録機能を取得した理由です。:)
kaiser

2

公正な警告:WPのパッケージバージョンのjQueryを独自に登録解除すると、特に、WPがバージョンを更新するたびに、指しているバージョンを変更するように細心の注意を払っていない場合、問題が発生する可能性があります これは、WPバージョンのjQueryとの最大の互換性のためにプラグインを頻繁に(または少なくともそうすべきである)プラグインに対して二重になります。

とは言っても、最初のバージョンは正しい-にフックされていwp_enqueue_scriptsます。2番目の関数がにフックされているためinit、正しく機能していない可能性があります。

同様の方法で独自のスクリプトを追加します。

function bbg_enqueue_scripts() {
    // You should probably do some checking to see what page you're on, so that your
    // script only loads when it needs to
    wp_enqueue_script( 'bbg-scripts', get_stylesheet_directory_url() . '/js/bbg-scripts.js', array( 'jquery' ) );
}
add_action( 'wp_enqueue_scripts', 'bbg_enqueue_scripts' );

ここでjsは、現在のテーマディレクトリのディレクトリからスクリプトを読み込んでいると想定しています。そうでない場合は、URIパラメーターを変更します。3番目のパラメーターarray( 'jquery' )は、にbbg-scripts依存するjqueryため、後でロードする必要があることを示しています。詳細については、https://codex.wordpress.org/Function_Reference/wp_enqueue_scriptを参照してください。


1
if (function_exists('load_my_scripts')) {  
function load_my_scripts() {  
    if (!is_admin()) {  
    wp_deregister_script( 'jquery' );  
    wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); 
    wp_enqueue_script('jquery');   
    }  
}  
}  
add_action('init', 'load_my_scripts');

これは何もしません...私はあなたが意味することを疑います

if (!function_exists('load_my_scripts')) {

あなたの例は、関数load_my_scriptsが既に存在する場合にのみロードします(そうしないと、エラーが発生します)。


0

パフォーマンス上の理由で、jqueryおよびその他のコアjsファイルをCDNからロードする場合は、コアおよびプラグイン関数で発生する厄介な事態を防ぐために、必ず同じバージョンをロードしてください。このような:

$wp_jquery_version = $GLOBALS['wp_scripts']->registered['jquery-core']->ver;
$jquery_version = ( $wp_jquery_version == '' ) ? '1.8.3' : $wp_jquery_version; // fallback, just in case 
wp_deregister_script('jquery');
wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/'. $jquery_version .'/jquery.min.js', $jquery_version, false );
wp_enqueue_script('jquery');

-2

jqueryをロードするためのすべての異なる方法をチェックした後(この投稿だけでなく)、これらのすべてがこれらのすべてを実行しないことに気付きました:

  1. functionを使用してjqueryを登録(およびおそらくキューに登録)し、プラグインで使用できるようにします。
  2. プロトコル相対URLでGoogle CDNからロードします。
  3. Googleがオフラインの場合、ローカルコピーにフォールバックします。

リストにはこれらの一部を実行する代替バージョンが多数ありますが、すべてではありません。そのため、すでに利用可能なメソッドの一部を組み合わせて変更するバージョンを作成しました。ここにあります:

function nautilus7_enqueue_scripts() {

    // Load jquery from Google CDN (protocol relative) with local fallback when not available
    if ( false === ( $url = get_transient('jquery_url') ) ) {

        // Check if Google CDN is working
        $url = ( is_ssl() ? 'https:' : 'http:' ) . '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js';
        $resp = wp_remote_head($url);

        // Load local jquery if Google down
        if ( is_wp_error($resp) || 200 != $resp['response']['code'] ) {

            $url = get_template_directory_uri() . '/js/vendor/jquery-1.7.2.min.js';
        }

        // Cache the result for 5 minutes to save bandwidth
        set_transient('jquery_url', $url, 60*5);
    }

    // Deregister Wordpress' jquery and register theme's copy in the footer
    wp_deregister_script('jquery');
    wp_register_script('jquery', $url, array(), null, true);

    // Load other theme scripts here

}
add_action('wp_enqueue_scripts', 'nautilus7_enqueue_scripts');

帯域幅を節約し、ページがリロードされるたびにGoogleにpingを送信しないために、Wordpress Transient APIを使用して5分間Google CDNがオンラインかどうかを記憶します。


推奨されません。WordPressが使用しているjQueryのバージョンと正確に一致するように、WordPressを更新するたびにスクリプトを更新する必要があります。さらに、Googleは圧縮されたライブラリを送信できない場合があるため、ページの読み込みが遅くなりました。
FUXIA

私はwordpressのjqueryを使用していません。コードを読んでください。テーマのバージョンを使用しています。Googleが気に入らない場合は、別のCDNを使用できます。
nautilus7

ただし、それがポイントです。WordPressjQueryを使用して、バージョンが正しいことを確認する必要があります。
FUXIA

私はあなたに従わない。Googleから必要なバージョンを入手し、同じバージョンをテーマにバンドルします。それがみんながやっている方法です。Wordpressは(adminセクションで)付属のバージョンを使用できます。
nautilus7

1
jQueryのどのバージョンでも使用できますが、テーマにバンドルしている場合、ユーザーにこれを強制します。誰もがjQuery 1.8.2を使用している今から数年後、テーマを最新に維持しない限り、ユーザーは古いバージョンに固執します。
Chris_O
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.