Annoying JQMIGRATE: Migrate est dans la console après la mise à jour vers WP 4.5

44

Quelqu'un peut-il expliquer pourquoi y a-t-il un préavis constant

  

JQMIGRATE: Migrate est installé, version 1.4.0

qui pointe sur load-scripts.php dans ma console lorsque j'ai mis à jour mon thème vers WordPress 4.5, et comment peut-il être supprimé?

Ce n'est pas une erreur, mais c'est toujours présent dans ma console et je ne vois vraiment pas à quoi ça sert? Devrais-je mettre à jour quelque chose, apporter des modifications à mon code?

J'ai peut-être un peu d'OCD, mais généralement, lorsque j'inspecte le site, j'aime bien voir les erreurs et les avis réels qui indiquent un problème sur ma console ...

    
posée dingo_d 24.04.2016 - 11:48

6 réponses

43

WordPress utilise le script de migration jQuery pour assurer la compatibilité en amont des plug-ins ou des thèmes que vous pourriez utiliser, qui utilisent des fonctionnalités supprimées des nouvelles versions de jQuery.

Avec la sortie de WordPress 4.5, il semble qu'ils aient mis à niveau la version de jQuery migrate à partir de v1. .2.1 pour v1.4.0 - Parcourir rapidement le code révèle que la v1.4.0 enregistre le chargement du script, que l'option migrateMute soit définie ou non, que ce soit dans les versions décompressée ou réduite.

La seule façon de supprimer la notification est de vous assurer que tous vos codes de plugins / thème ne reposent pas sur une ancienne fonctionnalité de jQuery, puis supprimez le script migrate. Il existe un plug-in pour le faire, mais c'est tout à fait une méthode simple qui peut simplement être placée dans le fichier de fonctions de votre thème ou similaire:

add_action('wp_default_scripts', function ($scripts) {
    if (!empty($scripts->registered['jquery'])) {
        $scripts->registered['jquery']->deps = array_diff($scripts->registered['jquery']->deps, ['jquery-migrate']);
    }
});

Notez que ceci n'est pas considéré comme une pratique recommandée pour le développement WordPress et, à mon avis, le script migrate ne doit pas être supprimé uniquement pour préserver la console du développeur.

    
réponse donnée Andy 24.04.2016 - 13:41
10

Vous pouvez changer le texte du message de journal en blanc dans jquery-migrate.min.js , mais cela ne sera pas conservé dans la mise à jour principale.

L'alternative consiste à ajouter une copie de la fonction de filtrage / filtrage de console.log juste avant le chargement du script de migration, et à lui demander d'ignorer les messages de journalisation contenant ' Migrate is installed '. En procédant ainsi, vous conserverez d’autres avertissements de migration:

// silencer script
function jquery_migrate_silencer() {
    // create function copy
    $silencer = '<script>window.console.logger = window.console.log; ';
    // modify original function to filter and use function copy
    $silencer .= 'window.console.log = function(tolog) {';
    // bug out if empty to prevent error
    $silencer .= 'if (tolog == null) {return;} ';
    // filter messages containing string
    $silencer .= 'if (tolog.indexOf("Migrate is installed") == -1) {';
    $silencer .= 'console.logger(tolog);} ';
    $silencer .= '}</script>';
    return $silencer;
}

// for the frontend, use script_loader_tag filter
add_filter('script_loader_tag','jquery_migrate_load_silencer', 10, 2);
function jquery_migrate_load_silencer($tag, $handle) {
    if ($handle == 'jquery-migrate') {
        $silencer = jquery_migrate_silencer();
        // prepend to jquery migrate loading
        $tag = $silencer.$tag;
    }
    return $tag;
}

// for the admin, hook to admin_print_scripts
add_action('admin_print_scripts','jquery_migrate_echo_silencer');
function jquery_migrate_echo_silencer() {echo jquery_migrate_silencer();}

Le résultat est une ligne de script HTML ajoutée aux interfaces frontend et backend qui produit l'effet souhaité (empêche le message installé.)

    
réponse donnée majick 25.04.2016 - 11:05
6

Juste un petit test ici.

J'ai jeté un coup d'œil sur jquery-migrate.js et j'ai remarqué cette partie:

// Set to true to prevent console output; migrateWarnings still maintained
// jQuery.migrateMute = false;

j'ai donc testé les éléments suivants avec le wp_add_inline_script() nouvellement introduit dans la version 4.5:

add_action( 'wp_enqueue_scripts', function()
{   
    wp_add_inline_script( 
        'jquery-migrate', 'jQuery.migrateMute = true;',
        'before' 
    );
} );

Cela va changer:

  

JQMIGRATE: Migrate est installé avec   enregistrement actif, version 1.4.0

à:

  

JQMIGRATE: Migrate est installé, version 1.4.0

Cela n'empêche donc pas toutes les sorties de la console, comme cette partie dans jquery-migrate.js :

// Show a message on the console so devs know we're active
if ( window.console && window.console.log ) {
    window.console.log( "JQMIGRATE: Migrate is installed" +
        ( jQuery.migrateMute ? "" : " with logging active" ) +
        ", version " + jQuery.migrateVersion );
}
    
réponse donnée birgire 25.04.2016 - 11:42
1

Solution:

ajoutez ceci au fichier functions.php:

function remove_jquery_migrate_notice() {
    $m= $GLOBALS['wp_scripts']->registered['jquery-migrate'];
    $m->extra['before'][]='temp_jm_logconsole = window.console.log; window.console.log=null;';
    $m->extra['after'][]='window.console.log=temp_jm_logconsole;';
}
add_action( 'init', 'remove_jquery_migrate_notice', 5 );

Cela fonctionne lorsque jquery-migrate est appelé avec un hook standard (qui génère <link rel=stylesheet....> ) et non avec load-scripts.php en bloc (comme dans admin-dashboard).

    
réponse donnée T.Todua 21.09.2018 - 17:38
1

Vous avez eu le même problème et vous avez découvert qu'il vous suffisait de définir SCRIPT_DEBUG sur false dans votre wp-config.php . J'espère que cela aide quelqu'un

    
réponse donnée Yuri 26.08.2018 - 23:25
-2

Comme mentionné précédemment par Andy WordPress utilise le script de migration jQuery pour assurer la compatibilité avec les versions antérieures . C’est pourquoi il est automatiquement chargé par défaut.

Voici un moyen sûr de supprimer le module JQuery Migrate et de vous débarrasser ainsi de la remarque agaçante JQMIGRATE tout en accélérant le chargement de votre page côté client. Copiez / collez simplement ce code dans votre fichier functions.php et vous avez terminé:

<?php
/**
 * Disable jQuery Migrate in WordPress.
 *
 * @author Guy Dumais.
 * @link https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/
 */
add_filter( 'wp_default_scripts', $af = static function( &$scripts) {
    if(!is_admin()) {
        $scripts->remove( 'jquery');
        $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.12.4' );
    }    
}, PHP_INT_MAX );
unset( $af );


Plus de détails

Pour plus de détails sur la raison pour laquelle j'utilise une fonction statique, lisez mon article ici:
►► enlace

    
réponse donnée Guy Dumais Digital 26.04.2018 - 17:31

Lire d'autres questions sur les étiquettes