it-swarm.com.ru

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

Я установил плагин 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');

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

16
PNMG

Когда 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 );

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

22
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 работает как шарм.

11
Mark Jeldi

Вот мое решение, создайте плагин, который может отключить другие плагины следующим образом:

/*
 * 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);
}

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

Источник

1
user128526