ওয়ার্ডপ্রেস ৪.৫-এ আপডেট হওয়ার পরে কনসোলটিতে বিরক্তিকর "জিকিউ মাইগ্রেট: হিজরত করুন ..."


53

কেন একটি ধ্রুবক বিজ্ঞপ্তি আছে,

জকিউমিগ্রেট: মাইগ্রেট ইনস্টল করা আছে, সংস্করণ 1.4.0

load-scripts.phpআমি যখন আমার থিমটি ওয়ার্ডপ্রেস ৪.৫ এ আপডেট করেছি তখন এটি আমার কনসোলকে নির্দেশ করে এবং কীভাবে এটি সরানো যায়?

এটি ত্রুটি নয়, তবে এটি সর্বদা আমার কনসোলে উপস্থিত থাকে এবং আমি এর সত্যতা কি তা বুঝতে পারি না। আমার কিছু আপডেট করা উচিত, বা আমার কোডে কিছু পরিবর্তন করা উচিত?

হতে পারে আমার কাছে কিছুটা ওসিডি রয়েছে, তবে সাধারণত যখন আমি সাইটটি পরিদর্শন করি তখন আমি ত্রুটিগুলি এবং আসল বিজ্ঞপ্তিগুলি দেখতে পছন্দ করি যা আমার কনসোলের কোনও সমস্যার দিকে ইঙ্গিত করে ...


আপনার খুব দরকারী ওসিডিতে +1 করুন। এটি সম্ভবত jquery স্থানান্তর / পশ্চাদপটে সামঞ্জস্য স্ক্রিপ্ট থেকে এসেছে। আপনি এর অবিস্মরণযুক্ত / দেব সংস্করণ ব্যবহার করার কোনও সুযোগ আছে?
মার্ক কাপলুন

মাইগ্রেটের ভারীকরণ সংস্করণ? আমার জানা নেই, এটি কিছু প্লাগইন হতে পারে তবে পরিদর্শন করার পরে আমি এর কোনও কিছুই দেখতে পাচ্ছি না:
d

1
নোট করুন উভয় সংস্করণ ডাব্লুপি /wp-admin/js/jquery/jquery-migrate.js/wp-admin/js/jquery/jquery-migrate.min.js
ডায়ারগুলিতে রয়েছে

উত্তর:


50

আপনি যে কোনও প্লাগইন বা থিম ব্যবহার করতে পারেন তার jQuery এর নতুন সংস্করণগুলি থেকে কার্যকারিতা সরিয়ে ফেলার পিছনে সামঞ্জস্যতা নিশ্চিত করতে ওয়ার্ডপ্রেস jQuery মাইগ্রেট স্ক্রিপ্ট ব্যবহার করে।

ওয়ার্ডপ্রেস 4.5 মুক্তির সঙ্গে, এটা মনে হচ্ছে, তারা আপগ্রেড হয়েছে jQuery এর সংস্করণ থেকে মাইগ্রেট v1.2.1 করার v1.4.0 - কোড মাধ্যমে একটি দ্রুত স্ক্যান জানায় যে v1.4.0 লগ স্ক্রিপ্ট লোড হয় নির্বিশেষে রয়ে হোক বা না হোক migrateMuteবিকল্প সেট করা হয়েছে এবং উভয় সংকোচিত এবং মিনিযুক্ত সংস্করণে।

বিজ্ঞপ্তিটি সরিয়ে ফেলার একমাত্র উপায় হ'ল আপনার সমস্ত প্লাগইন / থিম কোড কোনও পুরানো jQuery কার্যকারিতার উপর নির্ভর করবেন না এবং তারপরে স্থানান্তরিত স্ক্রিপ্টটি সরিয়ে ফেলুন ensure এটি করার জন্য এখানে একটি প্লাগইন রয়েছে, তবে এটি বেশ সহজ একটি পদ্ধতি যা আপনার থিমের ফাংশন ফাইল বা অনুরূপভাবে স্থাপন করা যেতে পারে:

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

দয়া করে নোট করুন যে এটি ওয়ার্ডপ্রেস বিকাশের জন্য সেরা অনুশীলন হিসাবে বিবেচনা করা হয় না এবং আমার মতে মাইগ্রেট স্ক্রিপ্টটি কেবল বিকাশকারী কনসোলকে পরিষ্কার রাখার জন্য অপসারণ করা উচিত নয়।


সুতরাং মূলত আমার একটি প্লাগইন কোনও কার্যকারিতার উপর নির্ভর করে যা পুরানো jQuery সংস্করণের অংশ ছিল? সেই কার্যকারিতা কী তা জানার কোনও উপায় আছে? অথবা আমি কেবল স্থানান্তরিত স্ক্রিপ্টটি নিঃশব্দ করা নিরাপদ?
ডিঙ্গো_ডি

1
আপনার কোনও প্লাগইন পুরানো কার্যকারিতার উপর নির্ভর করে কিনা তা আমি নিশ্চিতভাবে বলতে পারি না, ওয়ার্ডপ্রেসে কেবল স্থানান্তরিত স্ক্রিপ্টটিকে নিরাপদ ডিফল্ট হিসাবে অন্তর্ভুক্ত করা হয় যদি আপনার ইনস্টলটিতে কোনও প্লাগইন থাকে যা কিছুক্ষণের মধ্যে আপডেট হয় নি। যদি এটিই আমি থাকতাম তবে আমি সাইটটির স্থানীয় ইনস্টলটিতে মাইগ্রেট স্ক্রিপ্টটি সরিয়ে ফেলতাম এবং তারপরে কনসোলে কোনও ত্রুটি না হওয়ার বিষয়টি নিশ্চিত করে এখনও সবকিছু প্রত্যাশা অনুযায়ী কাজ করে যাচ্ছিল
অ্যান্ডি

আমি এর বিরুদ্ধে সুপারিশ করছি। এই পিছনের সামঞ্জস্য একটি কারণ আছে। এটি ওয়ার্ডপ্রেসে অবহেলিত ফাংশন ফাইল মোছার jQuery সমতুল্য। আপনার বর্তমান সেটআপ পুরোপুরি সামঞ্জস্যপূর্ণ কিনা তা যাচাইয়ের সমস্ত সমস্যায় গিয়ে সেটআপ বা প্লাগইন সংযোজনগুলির পরিবর্তনের জন্য অ্যাকাউন্ট নাও দেয় এবং আপনার যে সম্ভাব্য সমস্যা তৈরি হবে তা প্রদত্ত কনসোল লগ বার্তা অপসারণের সম্পূর্ণ সন্দেহজনক সুবিধার বিরুদ্ধে ভারসাম্য রাখে না does ।
মজিক

1
@ মজিক স্ক্রিপ্টটি অপসারণ করা একটি ভাল ধারণা কিনা তা নিয়ে আলোচনা করা এই প্রশ্নের উত্তরের বাইরে নয়, এটি কনসোলে কীভাবে বার্তাটি সরিয়ে ফেলতে পারে সেই বিষয়টি বিশেষভাবে বিবেচনা করে। এফডাব্লুআইডাব্লু, আমি মনে করি স্ক্রিপ্ট অপসারণ করাও একটি খারাপ ধারণা। আমি মনে করি যে ডাউনওয়েটটি অপ্রত্যাশিত, কারণ আমার উত্তরটি ওপিএস প্রশ্নের পুরোপুরি উত্তর দেয়।
অ্যান্ডি

1
দুঃখিত আমি প্রায়শই ডাউনওয়েট করি না, তবে অনুভব করেছি যে এখানে এটির দরকার ছিল কারণ এমন সতর্কতা নেই যে এটি একটি ভাল ধারণা নাও হতে পারে এবং এটি উন্নয়নের সেরা অনুশীলনের বিপরীত (একটি সতর্কতা যুক্ত করুন এবং আমি ডাউনটোটটি সরিয়ে ফেলব।) আমি বিশ্বাস করুন যে প্রশ্নটি কীভাবে কেবল কনসোল বার্তাটি সরিয়ে ফেলতে হবে তা নয়, কীভাবে jquery মাইগ্রেশন অপসারণ করবেন। যদি কেউ ওয়ার্ডপ্রেসে আপডেট নাগ বার্তাটি সরিয়ে ফেলতে জিজ্ঞাসা করে তবে আপনি উত্তর দেবেন না "স্রেফ ওয়ার্ডপ্রেস আনইনস্টল করুন।"
মজিক

11

আপনি লগ বার্তা পাঠ্যটি ফাঁকাতে পরিবর্তন করতে পারেন jquery-migrate.min.jsতবে এটি মূল আপডেটে সংরক্ষণ করা হবে না।

বিকল্পটি হ'ল console.logমাইগ্রেট স্ক্রিপ্টটি লোড হওয়ার ঠিক আগে পাসথ্রু / ফিল্টার ফাংশন কপি যুক্ত করা এবং লগিং বার্তাগুলি উপেক্ষা করতে বলুন যাতে এতে ' Migrate is installed' থাকে contain এটি এইভাবে করা অন্য অভিবাসন সতর্কতাগুলিও সংরক্ষণ করবে:

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

ফলাফলটি হ'ল এইচটিএমএল স্ক্রিপ্টের এক লাইনের সম্মুখভাগ এবং ব্যাকএন্ড উভয় ক্ষেত্রে যুক্ত করা হয় যা পছন্দসই প্রভাব অর্জন করে (ইনস্টল করা বার্তাটি প্রতিরোধ করে))


1
ধারণার জন্য +1, তবে এটি যদি আপনার সাইট হয় তবে আপনার সমস্ত স্ক্রিপ্টগুলি সর্বশেষতম সংস্করণের সাথে সামঞ্জস্যপূর্ণ এবং
মাইগ্রেটারকে

হ্যাঁ তবে আমি অভিবাসীটিকে একেবারে অনুশীলন হিসাবে অপসারণের সাথে একমত নই কারণ এটি থিম / প্লাগইন ইনস্টল করার বিষয়টি গ্রহণ করে না যা সম্ভবত সর্বশেষতম jQuery এর সাথে সামঞ্জস্যপূর্ণ নয়। সমান্তরাল হিসাবে এখানে প্রচুর প্লাগইন রয়েছে যা এখনও কার্যকর হয় যদিও তারা এখানে কোনও ওয়ার্ডপ্রেস ফাংশন উপলব্ধি করতে পারে না বা সেখানে "সরকারীভাবে" অবহেলিত রয়েছে। পিছনে সামঞ্জস্যতা প্রতিরোধ এবং নিরাময়ের চেয়ে ভাল যখন এটি উভয় ক্ষেত্রেই আসে এবং সাধারণত, সাধারণভাবে সফ্টওয়্যার।
মজিক

2
আপনি ঠিক বলেছেন, তবে সর্বশেষতম jquery সংস্করণ সমর্থন না করা একটি বাগ আইএমও। 4.5 প্রায় এক মাস আগে আরসিতে গিয়েছিল, এবং কোডটি চালু করা সমস্ত পরিবর্তনগুলির সাথে যদি কাজ করার জন্য পরীক্ষা না করা হয়, তবে থিম / প্লাগইনটি সত্যই সামঞ্জস্যপূর্ণ নয়। বাইরের বিশ্বে ওয়ার্ডপ্রেস অবমূল্যায়ন বার্তাগুলি কোনও সময়ে প্রকৃত অবমূল্যায়নে রূপান্তরিত হয় এবং আপনি যখন এএসএপকে আপগ্রেড করতে চান তখন আপনি সেগুলি পরিচালনা করা ছেড়ে যেতে চান না। অভিবাসী আইএমও একটি স্থায়ী বৈশিষ্ট্য নয়, একটি অস্থায়ী সমাধান হওয়া উচিত।
মার্ক কাপলুন

2
আমি এখানে প্রিন্সিপালগুলির সাথে একমত নই, ইন্টারনেট একটি দ্রুত গতিশীল লক্ষ্য এবং ল্যান্ডস্কেপ সর্বদা পরিবর্তিত হয়। (উদাহরণস্বরূপ, সাইটের লোগো বৈশিষ্ট্যটি 4.5 এ পেতে সময় লাগলে সাইটগুলি কেবলমাত্র একটি লোগো রাখার ধারণা থেকে এগিয়ে গেছে)। ওল্ডটি কেবল তখনই খুব ভাল যখন খুব নির্দিষ্ট এবং স্থিতিশীল কুলুঙ্গি প্রয়োগ করা হয় তবে উদাহরণস্বরূপ jQuery একটি তুলনামূলকভাবে চলন্ত লক্ষ্য হতে পারে।
মার্ক কাপলুন

1
থিম কোনও বিচ্ছিন্ন পণ্য নয়। কোনও থিম যদি ওয়ার্ডপ্রেস এবং জ্যাকোরি ইত্যাদি প্যাকেজিং করত তবে থিমটির বয়স পুরোপুরি প্রাসঙ্গিক হত। যেহেতু কোনও থিম এটি করে না, থিমটি যদি ওয়ার্ডপ্রেস ব্যবহারের সংস্করণের বিপরীতে পরীক্ষা না করা হয় তবে কী ধরণের বাগগুলি অনুসন্ধান করা হবে তা যথেষ্ট পরিষ্কার নয়। এটি স্থির বনাম গতিশীল লিঙ্কিং দ্বিধাটির আর একটি প্রকাশ। একটি স্থিতিশীল সংযোগ বিশ্বে আপনার দাবি বেশিরভাগ ক্ষেত্রে সত্য, তবে ওয়ার্ডপ্রেসটি গতিশীল লিঙ্কিং এবং কেবলমাত্র 3.5 এর সাথে কিছু কাজ করার অর্থ এই নয় যে এটি ব্যাককোম্পিলিটি হওয়ার চেষ্টা করেও 4.5 নিয়ে কাজ করবে
মার্ক কাপলুন

7

এখানে একটু পরীক্ষা।

আমি jquery-माइগ্রেট.জে এস এ দেখলাম এবং এই অংশটি লক্ষ্য করেছি:

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

সুতরাং আমি নতুনটি wp_add_inline_script()সংস্করণ ৪.৪ এ প্রবর্তিত নতুনটির সাথে পরীক্ষা করেছি :

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

এটি পরিবর্তন হবে:

জকিউমিগ্রেট: মাইগ্রেট লগিং সক্রিয়, সংস্করণ 1.4.0 এর সাথে ইনস্টল করা আছে

প্রতি:

জকিউমিগ্রেট: মাইগ্রেট ইনস্টল করা আছে, সংস্করণ 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 শুধুমাত্র কনসোল বার্তা দ্বিতীয়ার্ধে জন্য পরীক্ষা করা হয় - প্রথম অর্ধেক আউটপুট নির্বিশেষে ... হয় সরানোর এই কোড ব্লক কনসোল বার্তা মুছে ফেলা হবে, কিন্তু আপনি পুনরায় করার প্রতিটি ডাব্লু আপডেট প্রয়োজন হবে।
মজিক

2
গবেষণা এবং বিশদ জন্য ধন্যবাদ! আইএমও সেরা বিকল্প, যেহেতু জিউকিমিগ্রেট অপসারণ করা সর্বদা একটি ভাল ধারণা নয়, কারণ অনেক ডাব্লুপি প্লাগইন হ'ল জিকুয়েরি ফাংশনগুলির উপর নির্ভর করে। এই সমাধানটি কনসোল আউটপুটটি কিছুটা পরিষ্কার করতে সহায়তা করে!
ফিলিপ

1

সমাধান:

এটি ফাংশন.এফপিতে যুক্ত করুন:

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করা দরকার । আশা করি এটি কাউকে সাহায্য করবেfalsewp-config.php


2
এটি আমার পক্ষে কার্যকর হয়নি।
সার্জ সাগান

-1

অ্যান্ডি ওয়ার্ডপ্রেস দ্বারা পূর্বে উল্লিখিত হিসাবে পিছনের সামঞ্জস্যতা নিশ্চিত করতে jQuery স্থানান্তর স্ক্রিপ্ট ব্যবহার করে এবং এটি ডিফল্টরূপে স্বয়ংক্রিয়ভাবে লোড হয়।

এখানে JQuery মাইগ্রেট মডিউলটি সরিয়ে ফেলা এবং ক্লায়েন্টের পাশে আপনার পৃষ্ঠাটি লোড করার গতি বাড়ানোর সময় বিরক্তিকর JQMIGRATE বিজ্ঞপ্তি থেকে মুক্তি পাওয়ার জন্য এখানে একটি নিরাপদ উপায়। আপনার ফাংশন.এফপি ফাইলে এই কোডটি অনুলিপি করে অনুলিপি / আটকান এবং আপনি শেষ করেছেন:

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


আরো বিস্তারিত

আমি স্ট্যাটিক ফাংশনটি কী কারণে ব্যবহার করছি সে সম্পর্কে আরও বিশদ পেতে, আমার নিবন্ধটি এখানে পড়ুন:
ps https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/


2
ডাউনভোটেড কারণ ১. এটি একটি স্প্যামের খুব বেশি গন্ধ পেয়েছে এবং একটি উত্তরের মতো অনুভূত হওয়ার জন্য সর্বনিম্ন প্রচেষ্টা করে। ২. আপনি হার্ড কোডটি ক্যাশে বস্টিং বাতিল করে দেওয়ার সংস্করণটি।
মার্ক কাপলুন

এটি লজ্জাজনক কারণ এটি একটি দুর্দান্ত পদ্ধতি, এমনকি আপনি add_filterযখন ব্যবহার করছেন তখন এটি আসলে কোনও ক্রিয়া।
pcarvalho
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.