Вимкнути дії плагіна / плагіна через тему


19

Я встановив плагін Google Analyticator на своєму сайті. Я також використовую плагін MobilePress, щоб подавати тему, розроблену для мобільних браузерів, які не мають смартфонів. Я створив Google Analytics для мобільних пристроїв для використання в цій темі і хотів би вимкнути плагін Analyticator, оскільки він включає виклик у більший js-файл.

Хтось знає, чи можна відключити плагін за допомогою функції.php або якогось іншого методу?

Я вважаю, що я знайшов код, який додає функції на сторінку, тож якщо неможливо відключити весь плагін, чи можна зупинити дії для виконання? Я намагався відключити їх безпосередньо без удачі. Ось код з файлу плагінів:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

Я намагався видалити ці дії за допомогою:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

Будь-яка допомога дуже вдячна.


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

Так, я думав, що це також спрацює. У мене немає занадто багато досвіду роботи з додаванням / видаленням, тому я не знав, як її налагодити далі. Хоча відповідь EAMann спрацювала, яку саме інформацію ви шукали?
PNMG

Я трохи розгублений - чи не простіше просто відключити плагін звичайними засобами, якщо його потрібно назавжди піти? Яка відповідь EAMann робить лише за допомогою коду. Я припускав, що ви хочете, щоб це було відключено динамічно за певних умов ...
Rarst

У мене є звичайна тема, яка встановлена ​​в wordpress для будь-якого звичайного браузера настільних ПК. Для цієї теми я хочу використовувати плагін GA. Модуль mobilepress використовує php для отримання рядка з користувацьким агентом і подає іншу тему для смарт-телефону або для не-смарт-телефону. Я хотів використати файл function.php для теми, що не має смарт-телефонів, щоб відключити плагін GA від розміщення JS в <head> лише для цієї теми. Це все ще потрібно включити для двох інших тем (настільний та смарт-телефон). Чи допомагає це уточнити?
PNMG

Так, саме так я і думав. Але дезактивація просто відключить плагін постійно, і він залишатиметься вимкненим, поки не буде активовано явно. Я не вважаю, що це відповідає вашому випадку використання.
Рарст

Відповіді:


25

Коли WordPress активує плагін, він викликає activate_plugin()функцію. Ця функція активує плагін у пісочниці та переспрямовує кудись інше на успіх. Його декілька авторів використовували для програмної активації залежностей плагіна.

Існує ще одна функція, deactivate_plugin()яка робить аналогічну річ у зворотному порядку. Це насправді те, як WordPress деактивує плагіни, натискаючи кнопку «деактивувати» або «відключити».

Щоб вимкнути встановлений плагін, просто зателефонуйте:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

Або вимкнути кілька плагінів одночасно:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

Є другий параметр (перший - це рядок або масив плагінів для відключення), який дозволяє вимкнути плагіни без виклику гаків дезактивації. За замовчуванням встановлено значення false, і я рекомендую залишити його таким чином. Якщо ви чомусь не хочете обійти дезактивацію, зробіть це:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

Це просто вимкне плагін, але він не запустить нічого, що плагін зареєстрував, щоб зробити при дезактивації. Тож якщо плагін видаляє параметри або таблиці db, коли він відключений, ви хочете зробити це "безшумне" відключення, щоб зберегти цю інформацію та використовувати її в іншому місці.


Чудова відповідь - і не просто порівняно з іншою, скажімо, невмілою відповіддю "ось веб-сайт", яка може бути десь поруч.
редактор

Цей код, розміщений у function.php, деактивує плагін адміністратора, відключаючи його від двох інших тем. Дякую Вам Рарст за те, що це зрозуміло. Я хотів просто відключити його для однієї теми, де знаходився файл function.php.
PNMG

Ви використовуєте лише одну тему одночасно на певному сайті ... але якщо ви хочете знову активувати плагін після деактивації теми, це теж можливо.
EAMann

11

Це завдяки блискучій відповіді EAMann вище, і я подумав, що це може бути корисним і для оригінального плаката ...

Мені потрібно рішення, щоб переконатися, що користувачі відключили мій плагін, якщо вони завантажили преміум-версію (щоб уникнути можливих конфліктів). Раніше я виявив його стан за допомогою is_plugin_active і показав повідомлення про помилку адміністратора, щоб спонукати користувачів відключити його. Це набагато гладше ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

Примітка. Начебто, не працює на register_activation_hook, але admin_init працює як шарм.


1
Зауважу лише, що я впевнений, що is_plugin_active вже зареєстрований у гачку деактивації_плагінів, тому не потрібно робити це знову
Брайан Уілліс,

1

Ось моє рішення, створіть плагін, який може відключити інші плагіни, як-от так:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

Наведіть це на виробництво, увімкніть його, а потім перенесіть базу даних на вашу локальну розробнику.

Джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.