Отключить плагин / действие плагина через тему

19

Я установил плагин Google Analyticator на свой сайт. Я также использую плагин MobilePress для отображения темы, разработанной для мобильных браузеров без смартфона. Я настроил Google Analytics для мобильных устройств для использования в этой теме и хотел бы отключить плагин Analyticator, поскольку он включает в себя вызов более крупного файла js.

Кто-нибудь знает, можно ли отключить плагин с помощью functions.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');

Любая помощь очень ценится.

PNMG
источник
Что касается меня, то это должно работать технически, поэтому есть что-то в вашем времени выполнения этого кода, которое идет не так (слишком рано или слишком поздно). Пожалуйста, предоставьте больше информации.
Rarst
Да, я думал, что это сработает. У меня не слишком много опыта с действиями добавления / удаления, поэтому я не был уверен, как его отладить дальше. Хотя ответ Е.А.Манна сработал, какую дополнительную информацию вы искали?
PNMG
Я немного растерялся - не проще ли просто отключить плагин обычным способом, если его нужно пропустить навсегда? Какой ответ EAMann делает только по коду. Я предполагал, что вы хотите, чтобы он динамически
отключался
У меня есть обычная тема, которая установлена ​​в WordPress для любого обычного настольного браузера. Для этой темы я хочу использовать плагин GA. Плагин mobilepress использует php для получения строки user-agent и предлагает другую тему для смартфона или не для смартфона. Я хотел использовать файл functions.php для темы, не относящейся к смартфону, чтобы отключить плагин GA для помещения JS в <head> только для этой темы. Это все еще должно быть включено для двух других тем (рабочий стол и смартфон). Это помогает уточнить?
PNMG
Да, это то, что я думал. Но деактивация будет просто постоянно отключать плагин и будет отключена, пока не будет активирована явно. Я не считаю это подходящим для вашего случая использования.
Rarst

Ответы:

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

Это просто отключило бы плагин, но не запустило бы ничего, что плагин зарегистрировал для деактивации. Поэтому, если плагин удаляет опции или таблицы БД, когда он деактивирован, вы должны выполнить эту «тихую» деактивацию, чтобы сохранить эту информацию и использовать ее в другом месте.

EAMann
источник
Отличный ответ - и не просто по сравнению с другим, скажем, тусклым ответом «вот сайт», который может быть где-то рядом.
редактор
Этот код, размещенный в functions.php, деактивирует плагин в админке, тем самым отключая его от двух других тем. Спасибо, Рарст, за это. Я хотел просто отключить его для одной темы, где был расположен файл functions.php.
PNMG
Вы когда-либо используете только одну тему за раз на данном сайте ... но если вы хотите повторно активировать плагин после деактивации темы, это также возможно.
EAMann
11

Это благодаря блестящему ответу Е.А.Манна выше, и я подумал, что это может быть полезно и для оригинального плаката ...

Мне нужно было решение, чтобы пользователи деактивировали мой плагин, если они загрузили премиум-версию (чтобы избежать потенциальных конфликтов). Ранее я обнаружил его состояние с помощью 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 уже проверен в хуке deactivate_plugins, поэтому ему не нужно делать это снова
Брайан Уиллис,
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);
}

Переведите это в рабочий режим, включите его, а затем перенесите базу данных на локальный компьютер разработчика.

Источник

user128526
источник