web-dev-qa-db-fra.com

"JQMIGRATE: Migrate is ..." ennuyeux dans la console après la mise à jour vers WordPress 4.5

Pourquoi y a-t-il un 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 pour 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 ou apporter des modifications à mon code?

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

51
dingo_d

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 versions plus récentes de jQuery.

Avec la sortie de WordPress 4.5, il apparaît qu'ils ont mis à niveau la version de jQuery migrate from v1.2.1 vers v1.4.0 - Le fait de parcourir rapidement le code révèle que v1.4.0 indique que le script est chargé, que l'option migrateMute soit définie ou non, dans les versions décompressée et réduite.

Le seul moyen 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 plugin pour cela, mais c'est une méthode assez 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 cela n’est pas considéré comme une pratique recommandée pour le développement WordPress et, à mon avis, le script de migration ne doit pas être supprimé uniquement pour préserver la console du développeur.

48
Andy

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 Migrate:

// 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é).

11
majick

Juste un petit test ici.

J'ai jeté un œil dans 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 la nouvelle wp_add_inline_script() , introduite 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 la journalisation active, version 1.4.0

à:

JQMIGRATE: Migrate est installé, version 1.4.0

Donc, cela n’empêche pas toutes les sorties de la console, comme cette partie de 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 );
}
7
birgire

Solution:

ajoutez ceci à 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).

1
T.Todua

Avait le même problème, et a découvert que vous avez juste besoin de définir SCRIPT_DEBUG à false dans votre wp-config.php. J'espère que cela aide quelqu'un

1
Yuri