web-dev-qa-db-fra.com

Chargement de jQuery dans le pied de page après la suppression de jQuery migrate?

Je supprime jQuery migrate dans WordPress de la manière suivante:

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');
    }
}

Je ne comprends pas comment vous définissez la propriété in_footer avec le WP_Dependencies :: add function. J'ai essayé le sous-programme mais cela n'a pas fonctionné:

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

Quelle est la bonne façon de faire cela?

1
Brett

Il existe un moyen beaucoup plus sûr de supprimer jquery-migrate... Votre code est presque correct, mais vous devez d’abord supprimer jQuery, puis l’ajouter de nouveau. Si les dépendances pour jQuery vont changer, votre code posera des problèmes.

Mais vous n'avez pas besoin de supprimer le script pour changer ses dépendances. Vous pouvez faire exactement cela:

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' );

C'est beaucoup plus sûr, car nous ne supprimons qu'une dépendance que nous souhaitons supprimer.

Et si vous souhaitez déplacer jQuery vers le pied de page, vous pouvez utiliser ce code:

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' );

Encore une fois - nous ne supprimons aucun script et n’ajoutons le nôtre, mais ne modifions que les scripts existants, ce qui en fait une approche beaucoup plus sécurisée.

2
Krzysiek Dróżdż

C'est exact, mais vous avez fourni une nouvelle source.

Remplacer:

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

Avec:

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