ডাব্লুপি-সিএমএল করার সময় আমি কীভাবে কোনও প্লাগিন লোড হওয়া আটকাব?


13

আমি বর্তমানে এই কোডটি মূল প্লাগইন ফাইলে নিজেই ব্যবহার করি। তবে সেই প্লাগইনটি আমার নিজস্ব নয় তাই আমি এই কোডটি প্রতিবার যুক্ত না করে এটিকে স্বাভাবিকভাবে আপগ্রেড করতে সক্ষম হতে চাই।

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

আমার এটি করা দরকার কারণ এই প্লাগইনটি ত্রুটি তৈরি করে এবং ডাব্লুপি-ক্লাইটকে সঠিকভাবে কার্যকর করতে থামায় যাতে আমি কেবল ডাব্লুপি-ক্লিমে প্লাগইনটি অক্ষম করতে পারি না, আমার কাজগুলি করতে পারি এবং এটি আবার সক্ষম করতে পারি।

আমি if x then do not load plugin file xমু-প্লাগইন থেকে কিছু করার মতো কোনও উপায় আছে কি ?

উত্তর:


13

প্লাগইনগুলি লোড করার জন্য ওয়ার্ডপ্রেস প্রথম যে কাজটি করে তা হ'ল ডেটাবেজে সংরক্ষিত হিসাবে সক্রিয় প্লাগইনগুলি পাওয়া:

$active_plugins = (array) get_option( 'active_plugins', array() );

যেহেতু এটি ব্যবহার করে get_option()আমরা option_active_pluginsফ্লাইটটিতে সক্রিয় প্লাগিনগুলির তালিকা সংশোধন করতে ব্যবহার করতে পারি ।

function wpse_301282_disable_plugin( $active_plugins ) {
    if ( defined( 'WP_CLI' ) && WP_CLI ) {
        $key = array_search( 'gravityforms/gravityforms.php', $active_plugins );

        if ( $key ) {
            unset( $active_plugins[$key] );
        }
    }

    return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );

gravityforms/gravityforms.phpআপনি যে প্লাগইনটি অক্ষম করতে চান তার কেবল ডিরেক্টরি এবং ফাইলের নাম দিয়ে প্রতিস্থাপন করুন ।

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

শুকরিয়া ওয়ার্ডপ্রেসটির "অবশ্যই প্লাগইনগুলি অবশ্যই রয়েছে " এটি এমন প্লাগইন যা আপনি আগে এবং পৃথকভাবে লোড হওয়া নিয়মিত প্লাগইনগুলিতে যুক্ত করতে পারেন এবং নিয়মিত প্লাগইন তালিকায় উপস্থিত হন না।

অবশ্যই এই কোডটি অবশ্যই ব্যবহারের প্লাগইনটিতে যুক্ত করার জন্য যা যা করা দরকার তা হ'ল একটি wp-content/mu-pluginsডিরেক্টরি তৈরি করা (যদি এটি ইতিমধ্যে বিদ্যমান না থাকে) এবং সেই কোডটিতে একটি পিএইচপি ফাইল (এটি কোনও কিছু বলা যেতে পারে) তৈরি করা। আপনার একটি প্লাগইন শিরোনাম বা অন্য কিছু প্রয়োজন নেই।

এখন ওয়ার্ডপ্রেস লোড হওয়ার সাথে সাথে সমস্ত কোডটি অন্য সমস্ত প্লাগইনের আগে সেই কোডটি লোড হবে। যেহেতু আমাদের ফিল্টারটি স্থানে রয়েছে, যখন ওয়ার্ডপ্রেস আপনি যে প্লাগইনটি অক্ষম করতে চান তা লোড করতে সক্রিয় প্লাগইনগুলির তালিকা পেলে ডাব্লুপি-সিএলআই সক্রিয় থাকলে সেই তালিকা থেকে ফিল্টার করা হবে।


একই ধারণা ছিল কিন্তু এটি কাজ করে না। কমপক্ষে আমার স্থানীয় পরিবেশে না। সম্ভবত get_option()স্থানান্তরকারী / অনুরূপে মান সংরক্ষণ করা হয় এবং এই ফিল্টারটি এড়িয়ে গেলে তাড়াতাড়ি ফিরে আসবে? (বেশিরভাগ ক্ষেত্রেই এটি কাজ করে না, কেবলমাত্র অ্যাডমিন প্লাগইন স্ক্রিনে এটি কার্যকর হয়ে যায়)
কিরো

হুঁ। উত্সটির দিকে তাকানো এবং যতদূর আমি বলতে পারি কেবলমাত্র option_ফিল্টার প্রয়োগ করা হবে না যদি এর কোনও মান না থাকে এবং ডিফল্টটি ফিরে আসে।
জ্যাকব পিটি

আসলে এটি ছিল (কোনও প্লাগইন সক্রিয় নয়)। আমার পরীক্ষার পরিবেশগুলি খুব পরিষ্কার রাখা উচিত নয় ..
ক্যারো

1
আমি এটি গ্রহণ করেছি কারণ আমার ক্ষেত্রে এটি আমার যা প্রয়োজন ছিল তা। যদিও সাধারণভাবে --skip-plugin=xডাব্লুপি-ক্লাইনের বিকল্প এটি করার আরও ভাল উপায় হতে পারে।
নেক্সটজেনেমস

15

skip-pluginsডাব্লুপি-সিএমএল ব্যবহার করার সময় স্বতন্ত্র প্লাগইনগুলি লোড না করতে আপনি ডাব্লুপি-সিএলএই বিকল্পটি ব্যবহার করতে পারেন ।

আপনি হয় এটি কমান্ডের মতো এটি ব্যবহার করতে পারেন:

wp user list --skip-plugins=my-plugin

অথবা আপনি এটি আপনার wp-cli.ymlফাইলে যুক্ত করতে পারেন :

skip-plugins:
- my-plugin

-1

স্রেফ প্লাগইন নামকরণের ডির নামটি এটি অক্ষম করবে। আমি কখনও কখনও এটি একটি প্লাগইন অস্থায়ীভাবে অক্ষম করার জন্য করি [লিনাক্স]:

mv my-plugin-dir renamed-my-plugin-dir

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