«JQMIGRATE: Migrate is…» ennuyeux dans la console après la mise à jour vers WordPress 4.5

53

Pourquoi y a-t-il un avis constant,

JQMIGRATE: Migrate est installé, version 1.4.0

qui pointe load-scripts.phpdans 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 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 ...

dingo_d
la source
+1 à votre OCD très utile. Cela provient probablement du script jquery migration / backward compat. Avez-vous une chance d'utiliser une version / dev non finifiée?
Mark Kaplun
Version non-finie de migrer? Pas à ma connaissance non, il pourrait s'agir de plugins, mais après inspection, je ne les vois pas: \
dingo_d
1
remarquez que les deux versions sont dans les /wp-admin/js/jquery/jquery-migrate.js/wp-admin/js/jquery/jquery-migrate.min.js
répertoires

Réponses:

50

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 semble qu'ils aient mis à niveau la version de jQuery migrée de v1.2.1 à v1.4.0 - L'analyse rapide du code révèle que la v1.4.0 enregistre le chargement du script, que le script soit chargé ou non. migrateMuteCette option est définie et dans les versions décompressée et réduite.

Le seul moyen de supprimer la notification est de s'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 le faire, 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 ceci 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.

Andy
la source
Donc, fondamentalement, l’un de mes plugins dépend d’une fonctionnalité qui faisait partie de l’ancienne version de jQuery? Y a-t-il un moyen de savoir quelle est cette fonctionnalité? Ou suis-je sûr de simplement désactiver le script de migration?
dingo_d
1
Je ne peux pas dire avec certitude si l'un de vos plugins dépend d'anciennes fonctionnalités. WordPress inclut simplement le script migrate comme valeur sécurisée par défaut au cas où votre installation comporte des plugins qui n'ont pas été mis à jour depuis un moment. Si c'était moi, je supprimerais le script migrate lors d'une installation locale du site, puis vérifierais que tout fonctionne toujours comme prévu, en veillant à ce qu'il n'y ait aucune erreur dans la console, etc.
Andy
Je recommande contre cela. Cette compatibilité ascendante existe pour une raison. C'est l'équivalent jQuery de la suppression du fichier de fonctions obsolètes dans WordPress. S'efforcer de vérifier si votre configuration actuelle est parfaitement compatible ne tient même pas compte des modifications apportées à la configuration ou aux ajouts de plug-ins. Et, compte tenu des problèmes potentiels que vous créeriez, ne compensez pas l'avantage totalement douteux de la suppression d'un message de journal de console. .
majick
1
@majick La question de savoir si la suppression du script est une bonne idée ou non est au-delà de la portée de cette réponse. Elle aborde spécifiquement le problème de la suppression du message dans la console. FWIW, je pense que supprimer le script est également une mauvaise idée. Je pense que le vote négatif est injustifié, car ma réponse répond parfaitement à la question des PO.
Andy
1
désolé, je ne vote pas souvent, mais j’ai estimé que c’était nécessaire ici, car il n’ya aucun doute sur le fait que ce n’est peut-être pas une bonne idée et qu’il s’agit du contraire des meilleures pratiques de développement (ajoutez un avertissement et je supprimerai le vote négatif.) I Je crois que la question est de savoir comment supprimer uniquement le message de la console et non comment supprimer jquery migrant lui-même. si quelqu'un demandait comment supprimer le message de mise à jour de mise à jour dans WordPress, vous ne répondriez pas "désinstallez simplement WordPress".
majick
11

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

L'alternative consiste à ajouter une copie de la fonction de relais / filtrage de console.logjuste 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 préserverez également d'autres avertissements de 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é).

majick
la source
1
+1 pour l'idée, mais s'il s'agit de votre site, il est probablement préférable de simplement vous assurer que tous vos scripts sont compatibles avec la dernière version et de supprimer le migrateur;)
Mark Kaplun
oui, mais je ne suis tout simplement pas d'accord avec la suppression de la migration, car elle ne prend pas en compte l'installation de thèmes / plugins qui pourraient ne pas être compatibles avec le dernier jQuery. en parallèle, il y a beaucoup de plugins qui fonctionnent encore même s'ils n'ont peut-être pas réalisé une fonction WordPress ici ou qu'il est "officiellement" obsolète. La compatibilité ascendante est une prévention et vaut mieux qu’un remède, qu’il s’agisse du logiciel en général.
majick
2
Vous avez raison, mais ne supportant pas la dernière version de jquery est un bug IMO. 4.5 est entré dans RC il y a environ un mois, et si le code n'a pas été testé pour fonctionner avec toutes les modifications qu'il a introduites, les thèmes / plugins ne sont pas vraiment compatibles. Dans le monde extérieur, les messages de désapprobation de wordpress se transforment en dépréciation réelle à un moment donné, et vous ne souhaitez pas les gérer au moment où vous devez mettre à niveau dès que possible. L'OMI du migrateur doit être une solution temporaire et non une fonctionnalité permanente.
Mark Kaplun
2
Je ne suis pas d’accord sur les principes ici, Internet est une cible qui évolue rapidement et le paysage change tout le temps. (au moment où il fallait mettre le logo du site à 4,5 par exemple, les sites étaient passés de l’idée de n’avoir qu’un seul logo). Old n’est utile que s’il est appliqué à des niches très spécifiques et stables, mais jQuery, par exemple, est connu pour être une cible relativement mobile.
Mark Kaplun
1
Un thème n'est pas un produit isolé. Si un thème était empaquetant wordpress et jquery, etc., alors l’âge du thème aurait été totalement pertinent. Comme aucun thème ne le fait, si le thème n’a pas été testé par rapport à la version de wordpress utilisée, le type de bugs à découvrir n’est pas suffisamment clair. Ceci est juste une autre manifestation du dilemme statique vs lien dynamique. Dans un monde de liens statiques, votre affirmation est généralement vraie, mais wordpress est un lien dynamique et le fait que quelque chose ait fonctionné avec la version 3.5 ne signifie pas qu'il fonctionnera avec la version 4.5, même si vous essayez d'être rétro
Mark Kaplun
7

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()version 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 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 );
}
birgire
la source
1
Donc, le code du bas supprime simplement le message, non? Je veux dire, la migration reste mais le message est supprimé, non? C'est mieux que de supprimer définitivement la migration
dingo_d
1
non, il s'agit d'une copie du code produisant le message du journal de la console qui est généré. cela montre que migrateMute n'est testé que pour la seconde moitié du message de la console - la première moitié est sortie quelle que soit ... La suppression de ce bloc de code supprime le message de la console, mais vous devez rétablir la mise à jour de chaque mise à jour WP.
majick
2
Merci pour la recherche et les détails! IMO est la meilleure option, car la suppression de JQmigrate n’est pas toujours une bonne idée, car de nombreux plug-ins WP dépendent de fonctions jQuery obsolètes. Cette solution permet de nettoyer un peu la sortie de la console!
Philipp
1

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 quand jquery-migrateest appelé avec le hook standard (quelles sorties <link rel=stylesheet....>) et non load-scripts.phpen vrac (comme dans admin-dashboard).

T.Todua
la source
1

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

Yuri
la source
2
Cela n'a pas fonctionné pour moi.
Serj Sagan
-1

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. Il suffit de copier / coller 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:
►► https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/

Guy Dumais Digital
la source
2
1. parce que cela sent trop le spam et fait juste l’effort minimal pour se sentir comme une réponse. 2. Vous codez en dur la version qui annule le contournement du cache.
Mark Kaplun
c'est dommage parce que c'est une bonne approche, même si vous utilisez add_filterquand c'est en fait une action.
pcarvalho