Як я не можу завантажувати плагін під час роботи з WP-CLI?


13

Зараз я використовую цей код у самому головному файлі плагінів. Але цей плагін не мій власний, тому я вважаю за краще мати можливість оновити його нормально без кожного разу додавання цього коду.

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

Мені потрібно це зробити, тому що цей плагін видає помилки і зупиняє wp-cli виконувати правильно, тому я не можу просто відключити плагін за допомогою wp-cli, виконувати завдання та повторно вмикати його.

Чи є спосіб я зробити щось на кшталт if x then do not load plugin file xму-плагіна?

Відповіді:


13

Одне з перших, що WordPress робить для завантаження плагінів - це отримати активні плагіни як збережені в базі даних:

$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каталог та ім’я файлу плагіна, який ви хочете відключити.

Проблема тут полягає в тому, що ми намагаємось вплинути на завантаження плагінів, тому не можемо це зробити зсередини плагіна, оскільки це занадто пізно. У темі теж було б пізно.

На щастя, WordPress має "Потрібно використовувати плагіни". Це плагіни, які ви можете додати, завантажені до та окремо до звичайних плагінів, і не відображаються у списку звичайних плагінів.

Все, що вам потрібно зробити, щоб додати цей код у плагін Must Use - це створити wp-content/mu-pluginsкаталог (якщо він ще не існує) та створити файл PHP (його можна назвати чим завгодно) з цим кодом у ньому. Вам не потрібен заголовок плагіна або щось інше.

Тепер цей код буде завантажений перед усіма іншими плагінами, коли WordPress завантажується. Оскільки наш фільтр встановлений, коли WordPress отримає список активних плагінів для завантаження плагіна, який ви хочете відключити, він буде відфільтрований із цього списку, якщо WP-CLI активний.


Була така ж ідея, але це не працює. Принаймні, не в моєму місцевому середовищі. Можливо get_option(), повертається рано, коли значення зберігається в перехідних / подібних, і цей фільтр пропускається? (Працює не в більшості випадків, лише на екрані плагіна адміністратора він фактично виконується)
kero

Гм. Дивлячись на джерело, і наскільки я можу сказати, єдина причина, що option_фільтр не буде застосований - це те, що він не має значення і повертає за замовчуванням.
Джейкоб Пітті

Так було насправді (плагіни не активні). Я не повинен підтримувати тестові умови занадто чистими ..
kero

1
Я прийняв це, бо в моєму випадку це те, що мені було потрібно. Навіть незважаючи на те, що --skip-plugin=xопція wp-cli в цілому може бути кращим способом.
NextGenThemes

15

Ви можете використовувати skip-pluginsопцію в WP-CLI, щоб не завантажувати окремі плагіни при використанні WP-CLI.

Ви можете використовувати його в такій команді:

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

Або ви можете додати це у свій wp-cli.ymlфайл:

skip-plugins:
- my-plugin

-1

Просто перейменування імені режиму плагіну відключить його. Я роблю це іноді, щоб тимчасово відключити плагін [linux]:

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

ОП хочуть пропустити плагін просто під час використання WP-CLI, а не для будь-якої іншої діяльності, яка може статися водночас
Марк Каплун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.