WordPress 4.5로 업데이트 한 후 콘솔에서 성가신 "JQMIGRATE : Migrate is…"


53

왜 끊임없는 통지가 있습니까?

JQMIGRATE : 이주 버전 1.4.0이 설치됨

load-scripts.php내 테마를 WordPress 4.5로 업데이트했을 때 콘솔에서 가리키며 어떻게 제거 할 수 있습니까?

오류는 아니지만 콘솔에 항상 존재하며 실제로 그 점이 무엇인지 알 수 없습니다. 무언가를 업데이트하거나 코드를 변경해야합니까?

어쩌면 나는 약간의 OCD를 가지고 있지만 일반적으로 사이트를 검사 할 때 콘솔의 문제를 가리키는 오류와 실제 통지를보고 싶습니다 ...


매우 유용한 OCD에 +1 이것은 아마도 jquery 마이그레이션 / 이전 버전과의 호환성 스크립트에서 비롯된 것입니다. 최소화되지 않은 / dev 버전을 사용할 가능성이 있습니까?
Mark Kaplun

마이그레이션의 축소되지 않은 버전? 내 지식으로는 아니, 일부 플러그인 일 수는 있지만 검사하면 아무것도 볼 수 없습니다 : \
dingo_d

1
두 버전 모두 유의 WP의 DIRS에 : /wp-admin/js/jquery/jquery-migrate.js/wp-admin/js/jquery/jquery-migrate.min.js
majick

답변:


50

WordPress는 jQuery 마이그레이션 스크립트를 사용하여 최신 버전의 jQuery에서 제거 된 기능을 사용하는 플러그인 또는 테마와의 호환성을 보장합니다.

WordPress 4.5 릴리스에서는 jQuery 마이그레이션 버전v1.2.1 에서 v1.4.0으로 업그레이드 한 것으로 보입니다 . 코드를 빠르게 스캔하면 v1.4.0이 스크립트가로드되었는지 여부에 관계없이 로그가 기록됩니다. migrateMute옵션이 설정되어 있고 압축되지 않은 버전과 축소 된 버전 모두에 있습니다.

알림을 제거하는 유일한 방법은 모든 플러그인 / 테마 코드가 이전 jQuery 기능에 의존하지 않도록하고 마이그레이션 스크립트를 제거하는 것입니다. 이 작업을 수행 하는 플러그인 이 있지만 테마의 함수 파일 또는 이와 비슷한 곳에 배치 할 수있는 매우 간단한 방법입니다.

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

이것은 WordPress 개발에 대한 모범 사례로 간주되지 않으며 개발자 콘솔을 깨끗하게 유지하기 위해 마이그레이션 스크립트를 제거해서는 안됩니다.


기본적으로 내 플러그인 중 하나는 이전 jQuery 버전의 일부 기능에 의존합니까? 그 기능이 무엇인지 알 수있는 방법이 있습니까? 아니면 마이그레이션 스크립트를 음소거해도 안전합니까?
dingo_d

1
플러그인이 이전 기능에 의존하는지 여부를 확실히 말할 수는 없습니다. WordPress에는 설치 중에 한동안 업데이트되지 않은 플러그인이있는 경우 마이그레이션 스크립트를 안전한 기본값으로 포함합니다. 내가 사이트 인 경우 사이트의 로컬 설치에서 마이그레이션 스크립트를 제거한 다음 콘솔에 오류가 없는지 확인하면서 모든 것이 여전히 예상대로 작동하는지 확인합니다.
Andy

나는 이것을 반대하는 것이 좋습니다. 이전 버전과의 호환성은 이유가 있습니다. WordPress에서 더 이상 사용되지 않는 함수 파일을 삭제하는 것과 동일한 jQuery입니다. 현재 설정이 완전히 호환 되는지 확인하는 데 어려움을 겪 더라도 설정 또는 플러그인 추가 변경 사항을 고려하지 않아도 될 수 있으며 잠재적 인 문제를 고려할 때 콘솔 로그 메시지를 제거하는 것이 확실하지 않은 이점과 균형을 이루지 못합니다 .
majick

1
@majick이 답변의 범위를 넘어서서 스크립트를 제거하는 것이 좋은 아이디어인지 아닌지를 논의하는 것은 콘솔에서 메시지를 제거하는 방법에 대한 문제를 해결합니다. FWIW, 나는 스크립트를 제거하는 것도 나쁜 생각이라고 생각합니다. 내 답변이 OPs 질문에 완벽하게 대답하기 때문에 공감대가 불필요하다고 생각합니다.
Andy

1
죄송합니다. 자주 다운 투표하지는 않지만 이것이 좋은 생각이 아니며 개발에 대한 모범 사례와 반대되는 경고가 없으므로 여기에 필요하다고 느꼈습니다 (경고를 추가하고 downvote를 제거하겠습니다). jquery 마이그레이션 자체를 제거하는 방법이 아니라 콘솔 메시지 만 제거하는 방법을 묻는 질문이 있다고 생각합니다. 누군가가 WordPress에서 업데이트 nag 메시지를 제거하는 방법을 물었다면 "WordPress를 제거하십시오."라고 대답하지 않습니다.
majick

11

로그 메시지 텍스트를 공백으로 변경할 수 jquery-migrate.min.js있지만 코어 업데이트시에는 유지되지 않습니다.

대안은 console.log마이그레이션 스크립트가로드되기 직전 에에 passthrough / filter 함수 사본을 추가 하고 ' Migrate is installed' 가 포함 된 로깅 메시지를 무시하도록 지시하는 것 입니다. 이 방법을 사용하면 다른 마이그레이션 경고도 보존됩니다.

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

결과적으로 프론트 엔드와 백엔드 모두에 HTML 스크립트 한 줄이 추가되어 원하는 효과를 얻을 수 있습니다 (설치된 메시지 방지).


1
)은 귀하의 사이트 인 경우 아이디어에 대한 +1,하지만, 그냥 모든 스크립트를 최신 버전으로 호환되어 있는지 확인하고 Migrator를 제거하는 아마 더
마크 Kaplun

예. 최신 jQuery와 아직 호환되지 않을 수있는 테마 / 플러그인 설치를 고려하지 않기 때문에 마이그레이션기를 실제로 제거하는 것에 동의하지 않습니다. 병렬로 여기에 WordPress 기능을 구현하지 않았거나 "공식적으로"더 이상 사용되지 않는 경우에도 여전히 잘 작동하는 플러그인이 많이 있습니다. 이전 버전과의 호환성은 예방이며 일반적으로 소프트웨어와 소프트웨어 모두에있어 치료법보다 낫습니다.
majick

2
당신은 맞지만 최신 jquery 버전을 지원하지 않는 것은 버그 IMO입니다. 4.5는 약 한 달 전에 RC에 들어 갔으며 코드가 도입 된 모든 변경 사항에 대해 작동하도록 테스트되지 않은 경우 테마 / 플러그인이 실제로 호환되지 않습니다. 세계에서 워드 프레스 지원 중단 메시지는 어느 시점에서 실제 지원 중단으로 바뀌므로 최대한 빨리 업그레이드해야 할 때까지 메시지를 처리하고 싶지 않습니다. 마이그레이션 기 IMO는 영구적 인 기능이 아닌 임시 솔루션이어야합니다.
Mark Kaplun

2
나는 교장 선생님의 의견에 동의하지 않습니다. 인터넷은 빠르게 움직이는 대상이며 풍경은 항상 변하고 있습니다. (예를 들어 사이트 로고 기능을 4.5로 가져 오는 데 걸리는 시간까지 사이트는 하나의 로고 만 있다는 아이디어에서 출발했습니다). 오래된 것은 매우 구체적이고 안정적인 틈새 시장에 적용될 때만 좋지만 예를 들어 jQuery는 상대적으로 움직이는 목표로 알려져 있습니다.
Mark Kaplun

1
테마는 격리 된 제품이 아닙니다. 테마가 워드 프레스와 jquery 등을 패키징했다면 테마의 시대는 완전히 관련이 있었을 것입니다. 테마가없는 것처럼, 테마가 사용되는 워드 프레스 버전에 대해 테스트되지 않았다면 어떤 종류의 버그가 발견 될지 명확하지 않습니다. 이것은 정적 링크와 동적 링크 딜레마의 또 다른 표현입니다. 정적 링크 세계에서 귀하의 주장은 대부분 사실이지만 워드 프레스는 동적 링크이며 3.5로 작업 한 것이 역 호환을 시도하더라도 4.5와 함께 작동한다는 것을 의미하지는 않습니다.
Mark Kaplun

7

여기에 약간의 테스트가 있습니다.

jquery-migrate.js를 들여다 보고이 부분을 ​​발견했습니다.

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

그래서 wp_add_inline_script()버전 4.5에 새로 도입 된 다음을 테스트했습니다 .

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

변경됩니다 :

JQMIGRATE : 마이그레이션이 로깅 활성 버전 1.4.0과 함께 설치됩니다.

에:

JQMIGRATE : 이주 버전 1.4.0이 설치됨

따라서 실제로 다음과 같은 모든 콘솔 출력을 막지는 못합니다 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 );
}

1
따라서 하단 코드는 메시지를 제거합니다. 마이그레이션이 유지되지만 메시지가 표시되지 않습니다. 이것은 마이그레이션을 확실히 제거하는 것보다 낫습니다
dingo_d

1
아니, 그 콘솔 로그 메시지를 생성하는 코드의 복사 않는 출력. 상반기에 관계없이 출력 ... - 그것은 migrateMute은 콘솔 메시지의 두 번째 절반을 테스트 것을 보여준다 제거 콘솔 메시지를 제거합니다이 코드 블록을하지만, 각 WP 업데이트 있음을 다시 실행해야합니다.
majick

2
연구 및 세부 사항에 감사드립니다! 많은 WP 플러그인이 더 이상 사용되지 않는 jQuery 함수에 의존하기 때문에 JQmigrate를 제거하는 것이 항상 좋은 생각은 아니기 때문에 IMO가 가장 좋은 옵션입니다. 이 솔루션은 콘솔 출력을 약간 정리하는 데 도움이됩니다!
Philipp

1

해결책:

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

jquery-migrate표준 후크 (출력 <link rel=stylesheet....>) 로 호출 load-scripts.php되고 대량으로 (admin-dashboard와 같이 ) 호출 되지 않을 때 작동합니다 .


1

동일한 문제가 있고, 당신은 단지 설정해야합니다 발견 SCRIPT_DEBUGfalse당신에 wp-config.php. 이것이 누군가를 돕기를 바랍니다.


2
그것은 나를 위해 작동하지 않았다.
Serj Sagan

-1

Andy WordPress가 이전에 언급했듯이 jQuery 마이그레이션 스크립트를 사용하여 이전 버전과의 호환성을 보장하므로 기본적으로 자동으로로드됩니다.

다음은 JQuery Migrate 모듈을 안전하게 제거하여 클라이언트 쪽에서 페이지 로딩 속도를 높이는 성가신 JQMIGRATE 알림을 제거하는 안전한 방법입니다. functions.php 파일 에이 코드를 복사 / 붙여 넣기 만하면 됩니다.

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


자세한 내용은

정적 함수를 사용하는 이유에 대한 자세한 내용을 보려면 여기 내 기사를 읽으십시오.
►► https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/


2
1. 스팸으로 인한 냄새가 너무 많으며 답을 느끼기위한 최소한의 노력만으로도됩니다. 2. 버전 무효화 캐시 무효화를 하드 코딩합니다.
Mark Kaplun

그것은 좋은 접근 방식이기 때문에 수치심, 심지어 add_filter실제로 행동 할 때 사용 합니다.
pcarvalho
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.