web-dev-qa-db-ja.com

JQueryを削除した後にフッターにjQueryをロードする

このようにして、WordPressのjQuery migrateを削除します。

add_filter( 'wp_default_scripts', 'remove_jquery_migrate' );

function remove_jquery_migrate( &$scripts ){
    if(!is_admin()){
        $scripts->remove( 'jquery');
        $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.2.1');
    }
}

in_footerプロパティを WP_Dependencies :: add 関数でどのように設定するか混乱しています。以下を試しましたがうまくいきませんでした:

$scripts->add( 'jquery', false, array( 'jquery-core' ), '1.2.1', ['in_footer' => true]);

これを行う正しい方法は何ですか?

1
Brett

jquery-migrate...を削除するにはもっと安全な方法があります。コードはほぼ正しいですが、最初にjQueryを削除してから、もう一度追加します。 jQueryの依存関係が変わると、あなたのコードは問題を引き起こすでしょう。

しかし、依存関係を変更するためにスクリプトを削除する必要はありません。あなたは正確にそれをすることができます:

function remove_jquery_migrate( $scripts ) {
    if ( ! is_admin() && isset( $scripts->registered['jquery'] ) ) {
        $script = $scripts->registered['jquery'];

        if ( $script->deps ) {
            $script->deps = array_diff( $script->deps, array( 'jquery-migrate' ) );
        }
    }
} 
add_action( 'wp_default_scripts', 'remove_jquery_migrate' );

削除したい依存関係を1つだけ削除するので、はるかに安全です。

そして、jQueryをフッターに移動したい場合は、次のコードを使用できます。

function remove_jquery_migrate( $scripts ) {
    if ( ! is_admin() && isset( $scripts->registered['jquery'] ) ) {
        $script = $scripts->registered['jquery'];

        if ( $script->deps ) {
            $script->deps = array_diff( $script->deps, array( 'jquery-migrate' ) );
        }

        $scripts->add_data( 'jquery', 'group', 1 );
        $scripts->add_data( 'jquery-core', 'group', 1 );
    }
} 
add_action( 'wp_default_scripts', 'remove_jquery_migrate' );

繰り返しますが、スクリプトを削除して独自のスクリプトを追加するのではなく、既存のスクリプトのみを変更するため、はるかに安全な方法です。

2

それは正しいのですが、あなたは新しいソースを供給しました。

交換します。

$scripts->add( 'jquery', false, array( 'jquery-core' ), '1.2.1', ['in_footer' => true]);

と:

$scripts->add( 'jquery', 'http://new-url/', array( 'jquery-core' ), '1.2.1', ['in_footer' => true]);
1
Ian