Отключение плагина / действия плагина через тему
Я установил плагин Google Analyticator на свой сайт. Я также использую плагин MobilePress для отображения темы, предназначенной для мобильных браузеров не-смартфонов. Я настроил Google Analytics для мобильных устройств для использования в этой теме и хотел бы отключить плагин Analyticator, так как он включает вызов более объемного js файла.
Кто-нибудь знает, возможно ли отключить плагин используя functions.php или каким-либо другим методом?
Я нашел код, который добавляет функции на страницу, поэтому если невозможно отключить весь плагин целиком, возможно ли остановить выполнение действий? Я пытался отключить их напрямую, но безуспешно. Вот код из файла плагина:
// Добавляем действия Google Analytics
add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');
Я пытался удалить эти действия следующим образом:
// Удаляем действия Google Analytics
remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');
Буду признателен за любую помощь.

Когда WordPress активирует плагин, он вызывает функцию activate_plugin()
. Эта функция активирует плагин в "песочнице" и перенаправляет пользователя в другое место при успешной активации. Некоторые разработчики используют её для программного включения зависимостей плагинов.
Существует другая функция — deactivate_plugins()
, которая делает обратное действие... Именно она отвечает за деактивацию плагинов, когда вы нажимаете "Деактивировать" или "Отключить" в админке 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 );
Это просто отключит плагин, не запуская зарегистрированных действий при деактивации. Например, если плагин удаляет опции или таблицы базы данных при отключении, "тихая" деактивация сохранит эти данные для дальнейшего использования.
- Документация из "A HitchHacker's Guide through WordPress"

Отличный ответ — и не только в сравнении с другим, скажем так, не самым впечатляющим ответом типа «вот вам сайт», который может быть где-то рядом.

Этот код, размещённый в functions.php, деактивирует плагин в админке, тем самым отключая его для двух других тем. Спасибо Rarst за это уточнение. Я хотел отключить его только для той темы, в которой находился файл functions.php.

Это стало возможным благодаря блестящему ответу 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 работает просто отлично.

Вот мое решение — создание плагина, который может отключать другие плагины следующим образом:
/*
* Plugin Name: Отключение/Настройка Плагинов
* Description: Позволяет отключать/настраивать плагины на основе переменных окружения
* Author: Chris Sewell
*/
/**
* Отключает указанные плагины в среде разработки.
*
* Это "Must-Use" плагин. Код здесь загружается автоматически перед загрузкой обычных плагинов.
* Это единственное место, откуда обычные плагины можно отключить программно.
*
* Разместите этот код в файле в WP_CONTENT_DIR/mu-plugins или укажите кастомное расположение
* для "development" или "production" на каждом сервере/среде.
*/
/* Отключает указанные плагины в среде разработки */
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);
}
Разверните это в продакшене, активируйте, а затем перенесите базу данных на локальную машину разработки.

Если вам нужно временно отключить плагин при выполнении определённого условия, не деактивируя его полностью для всех пользователей (как это делает deactivate_plugins()
), используйте фильтр option_active_plugins
в плагине из папки mu-plugins
, как показано в примере ниже:
# файл: wp-content/mu-plugins/disable-plugins.php
add_filter( 'option_active_plugins', function( $plugins ){
if ( $my_condition ) {
$plugins= array_diff($plugins, array('plugin_to_rm_1.php', 'plugin_to_rm_2.php'));
}
return $plugins;
});
