JQMIGRATE molesto: Migrate está en la consola después de actualizar a WP 4.5

44

¿Alguien puede explicar por qué hay un aviso constante?

  

JQMIGRATE: Migrate está instalado, versión 1.4.0

que apunta a load-scripts.php en mi consola cuando actualicé mi tema a WordPress 4.5, y ¿cómo puedo eliminarlo?

No es un error, pero siempre está presente en mi consola, y realmente no veo qué sentido tiene. ¿Debo actualizar algo, hacer algunos cambios en mi código?

Tal vez tenga un poco de ocd, pero generalmente cuando inspecciono el sitio, me gusta ver errores y avisos reales que apuntan a un problema en mi consola ...

    
pregunta dingo_d 24.04.2016 - 11:48

6 respuestas

43

WordPress usa la secuencia de comandos de migración jQuery para garantizar la compatibilidad con versiones anteriores de cualquier complemento o tema que pueda estar usando, la cual utiliza la funcionalidad eliminada de las nuevas versiones de jQuery.

Con el lanzamiento de WordPress 4.5, parece que han actualizado la versión de jQuery migrate de v1 .2.1 a v1.4.0 : realice un escaneo rápido a través del código revela que v1.4.0 registra que la secuencia de comandos se carga independientemente de si la opción migrateMute está establecida o no y en las versiones no comprimidas y minimizadas.

La única forma de eliminar el aviso es asegurarse de que todos sus complementos / códigos de temas no se basen en ninguna funcionalidad jQuery antigua y luego eliminar el script de migración. Hay un plugin para hacer esto, pero es bastante un método simple que solo se puede colocar en el archivo de funciones de su tema o similar:

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

Tenga en cuenta que esto no se considera la mejor práctica para el desarrollo de WordPress y, en mi opinión, el script de migración no debe eliminarse solo por mantener la consola del desarrollador limpia.

    
respondido por el Andy 24.04.2016 - 13:41
10

Puede cambiar el texto del mensaje de registro a blanco en jquery-migrate.min.js , pero esto no se conservará en la actualización del núcleo.

La alternativa es agregar una copia de la función de paso / filtro de console.log justo antes de que se cargue el script de migración, y decirle que ignore los mensajes de registro que contienen ' Migrate is installed '. Hacerlo de esta manera también preservará otras advertencias 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();}

El resultado es una línea de secuencia de comandos HTML agregada tanto al frontend como al backend que logra el efecto deseado (evita el mensaje instalado).

    
respondido por el majick 25.04.2016 - 11:05
6

Sólo una pequeña prueba aquí.

Me asomé a jquery-migrate.js y noté esta parte:

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

así que probé lo siguiente con el nuevo wp_add_inline_script() , introducido en la versión 4.5:

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

Esto cambiará:

  

JQMIGRATE: Migrate se instala con   registro activo, versión 1.4.0

a:

  

JQMIGRATE: Migrate está instalado, versión 1.4.0

Por lo tanto, en realidad no impide la salida de la consola, como esta parte en 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 );
}
    
respondido por el birgire 25.04.2016 - 11:42
1

Solución:

agrega esto a 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 );

Funciona cuando se llama a jquery-migrate con un gancho estándar (que genera <link rel=stylesheet....> ) y no con load-scripts.php a granel (como en admin-dashboard).

    
respondido por el T.Todua 21.09.2018 - 17:38
1

Tuvo el mismo problema y descubrió que solo necesita establecer SCRIPT_DEBUG a false en su wp-config.php . Espero que esto ayude a alguien

    
respondido por el Yuri 26.08.2018 - 23:25
-2

Como mencionó anteriormente Andy WordPress usa el script de migración jQuery para garantizar la compatibilidad con versiones anteriores y es por eso que se carga automáticamente de forma predeterminada.

Esta es una forma segura de eliminar el módulo JQuery Migrate y deshacerse del molesto aviso de JQMIGRATE mientras se acelera la carga de su página en el lado del cliente. Simplemente copie / pegue este código en su archivo functions.php y listo:

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


Más detalles

Para obtener más detalles sobre la razón por la que estoy usando una función estática, lea mi artículo aquí:
►► enlace

    
respondido por el Guy Dumais Digital 26.04.2018 - 17:31

Lea otras preguntas en las etiquetas