น่ารำคาญ“ JQMIGRATE: การโยกย้ายคือ…” ในคอนโซลหลังจากอัปเดตเป็น WordPress 4.5


53

ทำไมถึงมีการแจ้งเตือนอย่างต่อเนื่อง

JQMIGRATE: การติดตั้งการโอนย้ายเวอร์ชัน 1.4.0

สิ่งนั้นชี้ไปที่load-scripts.phpคอนโซลของฉันเมื่อฉันอัพเดตธีมเป็น WordPress 4.5 และจะลบออกได้อย่างไร

มันไม่ใช่ข้อผิดพลาด แต่มันมีอยู่เสมอในคอนโซลของฉันและฉันไม่เห็นว่าอะไรคือสิ่งที่เป็นจุดของมัน ฉันควรอัปเดตบางอย่างหรือทำการเปลี่ยนแปลงรหัสของฉันหรือไม่

บางทีฉันอาจมี OCD นิดหน่อย แต่โดยปกติเมื่อฉันตรวจสอบเว็บไซต์ฉันชอบที่จะเห็นข้อผิดพลาดและการแจ้งเตือนจริงที่ชี้ไปที่ปัญหาในคอนโซลของฉัน ...


+1 ไปยัง OCD ที่มีประโยชน์มากของคุณ สิ่งนี้อาจมาจากสคริปต์การโยกย้าย / ความเข้ากันได้แบบย้อนหลัง 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

ฉันแนะนำต่อนี้ ความเข้ากันได้ย้อนหลังนี้มีเหตุผล มันเทียบเท่ากับ jQuery ของการลบไฟล์ฟังก์ชั่นที่เลิกใช้แล้วใน WordPress ไปที่ปัญหาทั้งหมดของการตรวจสอบว่าการตั้งค่าปัจจุบันของคุณเข้ากันได้อย่างสมบูรณ์ไม่ได้บัญชีสำหรับการเปลี่ยนแปลงการตั้งค่าหรือการเพิ่มปลั๊กอินและให้ปัญหาที่คุณอาจสร้างไม่สมดุลกับผลประโยชน์ที่น่าสงสัยอย่างสมบูรณ์ของการลบข้อความบันทึกคอนโซล .
majick

1
@majick มันเกินขอบเขตของคำตอบนี้เพื่อหารือว่าการลบสคริปต์นั้นเป็นความคิดที่ดีหรือไม่นี่เป็นการแก้ไขปัญหาของการลบข้อความในคอนโซลโดยเฉพาะ FWIW ฉันคิดว่าการลบสคริปต์เป็นความคิดที่ไม่ดีเช่นกัน ฉันคิดว่า downvote นั้นไม่มีเหตุผลเพราะคำตอบของฉันตอบคำถาม OP ได้อย่างสมบูรณ์แบบ
Andy

1
ขออภัยฉันไม่ได้ลงคะแนนบ่อย แต่รู้สึกว่ามันจำเป็นที่นี่เนื่องจากไม่มีคำเตือนว่านี่อาจไม่ใช่ความคิดที่ดีและเป็นสิ่งที่ตรงกันข้ามกับแนวปฏิบัติที่ดีที่สุดในการพัฒนา (เพิ่มคำเตือนและฉันจะลบ downvote) ฉัน เชื่อว่าคำถามกำลังถามวิธีการลบเฉพาะคอนโซลข้อความไม่ใช่วิธีการย้าย jquery โยกย้ายตัวเอง หากมีคนถามว่าจะลบข้อความ nag update ใน WordPress หรือไม่คุณจะไม่ตอบ "เพียงถอนการติดตั้ง WordPress"
majick

11

คุณสามารถเปลี่ยนข้อความบันทึกเป็นว่างเปล่าjquery-migrate.min.jsแต่สิ่งนี้จะไม่ถูกเก็บไว้ในการอัพเดทหลัก

อีกทางเลือกหนึ่งคือการเพิ่มฟังก์ชั่น passthrough / filter console.logก่อนที่สคริปต์การโอนย้ายจะถูกโหลดและบอกให้ละเว้นการบันทึกข้อความที่มี ' 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 สำหรับแนวคิด แต่ถ้าเป็นเว็บไซต์ของคุณก็น่าจะดีกว่าเพื่อให้แน่ใจว่าสคริปต์ทั้งหมดของคุณเข้ากันได้กับเวอร์ชันล่าสุดและลบตัวย้ายออก);
Mark Kaplun

ใช่ แต่ฉันไม่เห็นด้วยกับการลบ migrator เป็นหลักเลยเพราะมันไม่ได้คำนึงถึงการติดตั้งธีม / ปลั๊กอินซึ่งอาจไม่สามารถใช้งานร่วมกับ jQuery ล่าสุดได้ ในฐานะที่เป็น parrallel มีปลั๊กอินจำนวนมากที่ยังคงทำงานได้ดีแม้ว่าพวกเขาอาจไม่ได้ตระหนักถึงฟังก์ชั่น WordPress ที่นี่หรือมี "อย่างเป็นทางการ" เลิกใช้แล้ว ความเข้ากันได้ย้อนหลังคือการป้องกันและดีกว่าการรักษาเมื่อมาถึงทั้งสองกรณีและดีซอฟต์แวร์โดยทั่วไป
majick

2
คุณพูดถูก แต่ไม่สนับสนุน jquery เวอร์ชันล่าสุดเป็นข้อผิดพลาด IMO 4.5 เข้าสู่ RC เมื่อประมาณหนึ่งเดือนที่ผ่านมาและหากรหัสไม่ได้รับการทดสอบว่าสามารถใช้งานได้กับการเปลี่ยนแปลงทั้งหมดที่กล่าวมาชุดรูปแบบ / ปลั๊กอินจะไม่เข้ากัน ในโลกภายนอกข้อความการคัดค้าน wordpress กลายเป็นการเลิกใช้งานจริงในบางจุดและคุณไม่ต้องการให้จัดการกับพวกเขาจนถึงเวลาที่คุณต้องอัปเกรด ASAP IMrator ของ migrator ควรเป็นโซลูชันชั่วคราวไม่ใช่คุณสมบัติถาวร
Mark Kaplun

2
ฉันไม่เห็นด้วยกับผู้บริหารที่นี่อินเทอร์เน็ตเป็นเป้าหมายที่รวดเร็วและภูมิทัศน์กำลังเปลี่ยนแปลงตลอดเวลา (ตามเวลาที่ใช้ในการรับคุณลักษณะโลโก้ของไซต์เป็น 4.5 ตัวอย่างเช่นไซต์ได้ย้ายจากแนวคิดที่มีเพียงโลโก้เดียว) เก่าจะดีเฉพาะเมื่อนำไปใช้กับนิชที่เฉพาะเจาะจงและมีความเสถียร แต่ตัวอย่างเช่น jQuery นั้นรู้ว่าเป็นเป้าหมายที่ค่อนข้างเคลื่อนไหว
ทำเครื่องหมาย Kaplun

1
ชุดรูปแบบไม่ใช่ผลิตภัณฑ์ที่แยกได้ หากชุดรูปแบบเป็น wordpress และ jquery บรรจุภัณฑ์ ฯลฯ จากนั้นอายุของชุดรูปแบบจะมีความเกี่ยวข้องโดยสิ้นเชิง ไม่มีธีมทำเช่นนั้นหากธีมนั้นไม่ได้ทดสอบกับเวอร์ชันของเวิร์ดเพรสที่ใช้อยู่มันจะไม่ชัดเจนพอว่าจะพบข้อบกพร่องชนิดใด นี่เป็นเพียงการรวมตัวของภาวะเชื่อมโยงคงที่ vs ไดนามิก ในโลกเชื่อมโยงแบบคงที่การเรียกร้องของคุณส่วนใหญ่เป็นจริง แต่ wordpress เป็นการเชื่อมโยงแบบไดนามิกและเพียงเพราะบางสิ่งที่ทำงานกับ 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
ขอบคุณสำหรับการวิจัยและรายละเอียด! IMO ตัวเลือกที่ดีที่สุดเนื่องจากการลบ JQmigrate ไม่ใช่ความคิดที่ดีเสมอไปเนื่องจากปลั๊กอิน WP จำนวนมากขึ้นอยู่กับฟังก์ชั่น jQuery ที่เลิกใช้แล้ว โซลูชันนี้ช่วยทำความสะอาดเอาต์พุตคอนโซลเล็กน้อย!
ฟิลิปป์

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อยู่ในกลุ่ม (เช่นในผู้ดูแลระบบแดชบอร์ด)


1

มีปัญหาเดียวกันและพบคุณเพียงแค่ต้องตั้งSCRIPT_DEBUGไปในของคุณfalse wp-config.phpหวังว่านี่จะช่วยใครซักคน


2
นั่นไม่ได้ผลสำหรับฉัน
Serj Sagan

-1

ดังที่ Andy WordPressกล่าวถึงก่อนหน้านี้ใช้สคริปต์การโยกย้าย jQuery เพื่อให้แน่ใจถึงความเข้ากันได้ย้อนหลังและนี่คือสาเหตุที่มีการโหลดโดยอัตโนมัติตามค่าเริ่มต้น

ต่อไปนี้เป็นวิธีที่ปลอดภัยในการลบโมดูล JQuery Migration และกำจัดการแจ้งเตือน 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
downvoted เนื่องจาก 1. สิ่งนี้มีกลิ่นของสแปมมากเกินไปและใช้ความพยายามเพียงเล็กน้อยในการรู้สึกเหมือนคำตอบ 2. คุณเขียนโค้ดรุ่นที่ทำให้แคชไม่เป็นอันตราย
Mark Kaplun

มันเป็นความอัปยศเพราะมันเป็นวิธีการที่ดีแม้ว่าคุณจะใช้add_filterเมื่อมันเป็นการกระทำที่แท้จริง
pcarvalho
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.