Автоматическая активация и деактивация плагинов в WordPress через функцию в PHP-коде

Информацию о том, какие плагины включены, а какие нет, WordPress хранит в таблице wp_options, в массиве active_plugins, так что всё, что нам потребуется, это изменить его содержимое.

Также читайте о том, как запретить установку плагинов и тем вообще.

Функция активации плагинов

Вставляем этот код в functions.php и функция включает все плагины (установленные конечно же), которые перечислены в ней.

function true_plugins_activate() {
	if ( $active_plugins = get_option('active_plugins') ) { // вытаскиваем массив с активными плагинами
		$activate_this = array( // в массиве перечисляем плагины которые хотим включить, путь к файлу плагина относительно папки plugins, о том как его узнать, написано ниже
			'hello.php', // например Hello Dolly
			'wp-pagenavi/wp-pagenavi.php' // и плагин списка страниц
		);
		foreach ( $activate_this as $plugin ) {
			if ( ! in_array( $plugin, $active_plugins ) ) {
				array_push( $active_plugins, $plugin );
				update_option( 'active_plugins', $active_plugins );
			}
		}
 
	}
}
 
add_action( 'admin_init', 'true_plugins_activate', 10 );

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

Функция отключения плагинов

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

function true_plugins_deactivate() {
	if ( $active_plugins = get_option('active_plugins') ) {
		$deactivate_this = array( // в массиве перечисляем плагины которые хотим деактивировать
			'akismet/akismet.php' // например этот плагин от спама
		);
		$active_plugins = array_diff( $active_plugins, $deactivate_this );
		update_option( 'active_plugins', $active_plugins );
	}
}
 
add_action( 'admin_init', 'true_plugins_deactivate', 20 );

Теперь плагин Akismet будет невозможно включить через админку 🙂

Небольшой сниппет, который позволит вывести путь к файлу плагина прямо в админке под описанием к каждому плагину

Вот что в итоге получится:

выводим путь к файлу плагина прямо в админке под описанием к каждому плагину

А вот сам сниппет, вставляемый в functions.php:

function true_echo_plugin_path( $plugin_meta, $plugin_file, $plugin_data, $status ) {
	echo '<code>' . $plugin_file . '</code><br />';
	return $plugin_meta;
}
 
add_filter( 'plugin_row_meta', 'true_echo_plugin_path', 10, 4 );

Конечно же, узнать путь можно и по FTP.

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Комментарии — 2

Комментирование этого поста более не доступно.
  • Иван 19 марта 2020 #

    Привет! Очень помогла Ваша статья, однако я около 2 часов пытался разобраться, почему у меня не активируется плагин...

    Как оказалось - у меня не было активированных плагинов и в переменную - $active_plugins (первое условие) попадало значение = 0, что интерпретировалось, как false.

    • Миша 20 марта 2020 #

      Привет!

      Иван, вы молодец, что разобрались! 💪