Irritante JQMIGRATE: Migrar está no console após a atualização para o WP 4.5

44

Alguém pode explicar por que há um aviso constante

  

JQMIGRATE: o Migrate está instalado, versão 1.4.0

que aponta para load-scripts.php no meu console quando atualizei meu tema para o WordPress 4.5 e como ele pode ser removido?

Não é um erro, mas está sempre presente no meu console, e eu realmente não vejo qual é o sentido disso? Devo atualizar alguma coisa, fazer algumas alterações no meu código?

Talvez eu tenha um pouco de ocd, mas normalmente quando inspeciono o site, gosto de ver erros e avisos reais que apontam para um problema no meu console ...

    
por dingo_d 24.04.2016 / 11:48
fonte

6 respostas

43

O WordPress usa o script de migração do jQuery para garantir a compatibilidade com versões anteriores de qualquer plug-in ou tema que você esteja usando e que use a funcionalidade removida das versões mais recentes do jQuery.

Com o lançamento do WordPress 4.5, parece que eles atualizaram a versão do jQuery migrando de v1 .2.1 para v1.4.0 - Verificando rapidamente o código revela que a v1.4.0 registra que o script foi carregado, independentemente de a opção migrateMute estar definida ou não e nas versões descompactada e minificada.

A única maneira de remover o aviso é garantir que todos os seus plugins / código de tema não dependam de nenhuma funcionalidade antiga do jQuery e, em seguida, remover o script de migração. Há um plugin para fazer isso, mas é bem um método simples que pode ser colocado apenas no arquivo de funções do seu tema ou 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']);
    }
});

Por favor, note que isso não é considerado uma prática recomendada para o desenvolvimento do WordPress e, na minha opinião, o script de migração não deve ser removido apenas para manter o console do desenvolvedor limpo.

    
por Andy 24.04.2016 / 13:41
fonte
10

Você pode alterar o texto da mensagem de log para em branco em jquery-migrate.min.js , mas isso não será preservado na atualização principal.

A alternativa é adicionar uma cópia da função de passagem / filtro de console.log até pouco antes de o script de migração ser carregado e dizer para ignorar as mensagens de log que contêm ' Migrate is installed '. Fazer isso dessa maneira preservará outros avisos Migrar também:

// 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();}

O resultado é uma linha de script HTML adicionada ao frontend e ao backend que atinge o efeito desejado (evita a mensagem instalada).

    
por majick 25.04.2016 / 11:05
fonte
6

Apenas um pequeno teste aqui.

Eu espiei jquery-migrate.js e notei esta parte:

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

Então testei o seguinte com o novo wp_add_inline_script() , introduzido na versão 4.5:

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

Isso mudará:

  

JQMIGRATE: o Migrate é instalado com   logging ativo, versão 1.4.0

para:

  

JQMIGRATE: o Migrate está instalado, versão 1.4.0

Por isso, não impede realmente toda a saída da consola, como esta parte em 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 );
}
    
por birgire 25.04.2016 / 11:42
fonte
1

Solução:

adicione isto 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 quando jquery-migrate é chamado com o gancho padrão (que gera <link rel=stylesheet....> ) e não com load-scripts.php em massa (como em admin-dashboard).

    
por T.Todua 21.09.2018 / 17:38
fonte
1

Tive o mesmo problema e descobri que você precisa definir SCRIPT_DEBUG to false no seu wp-config.php . Espero que isso ajude alguém

    
por Yuri 26.08.2018 / 23:25
fonte
-2

Como mencionado anteriormente por Andy o WordPress usa o script de migração do jQuery para garantir a compatibilidade com versões anteriores e é por isso que é automaticamente carregado por padrão.

Aqui está uma maneira segura de remover o módulo JQuery Migrate e, assim, livrar-se do aviso irritante do JQMIGRATE enquanto acelera o carregamento de sua página no lado do cliente. Simplesmente copie / cole este código no seu arquivo functions.php e pronto:

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


Mais detalhes

Para obter mais detalhes sobre o motivo pelo qual estou usando uma função estática, leia meu artigo aqui:
►► enlace

    
por Guy Dumais Digital 26.04.2018 / 17:31
fonte