Как запретить деактивацию важных плагинов?

Часто при написании дополнительного функционала для сайта мы используем плагины, чтобы ускорить разработку. Кто создаёт сайты на заказ наверняка сталкивались с ситуацией, когда слишком додельный и любопытный заказчик отключал нужный плагин и сайт лишался нужного функционала или просто переставал работать.

Чтобы избавиться от проблем такого рода, можно просто убрать кнопку «деактивировать» у плагинов, которые обязательно нужны для работы сайта.

На скриншоте показано:

  • Как отсутствует кнопка «деактивировать» у плагинов: Advanced Custom Fields PRO, Contact Form 7 и Kama Thumbnail.

  • Как у всех плагинов убрана кнопка «Изменить». Эту кнопку еще можно убрать определив константу DISALLOW_FILE_EDIT, тем самым вообще запретив редактирование файлов.

Делается всё это просто, через хук plugin_action_links:



add_filter( 'plugin_action_links', 'disable_plugin_deactivation', 10, 2 );
function disable_plugin_deactivation( $actions, $plugin_file ) { // Удаляет действие "Редактировать" у всех плагинов unset( $actions['edit']  ); // Удаляет действие "Деактивировать" у важных для сайта плагинов $important_plugins = array( 'advanced-custom-fields-pro/acf.php', 'kama-thumbnail/kama_thumbnail.php', 'contact-form-7/wp-contact-form-7.php', ); if ( in_array( $plugin_file, $important_plugins ) ) { unset( $actions['deactivate'] 
 ); } return $actions;
}

Кстати, обратите внимание, что для unset() не нужно проверять наличие ключа в массиве. При отсутствии ключа, ошибку уровня PHP notice мы не увидим! Это особенность такая у unset().

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

  • $actions — массив ссылок:

    Array ( [0]  => <a href="http://skinali.dev/wp-admin/admin.php?page=wpcf7">Настройки</a> [deactivate]  => <a href="plugins.php?action=deactivate&plugin=contact-form-7%2Fwp-contact-form-7.php&plugin_status=active&paged=1&s&_wpnonce=5fe6035ae5" aria-label="Деактивировать Contact Form 7">Деактивировать</a> [edit] 
     => <a href="plugin-editor.php?file=contact-form-7%2Fwp-contact-form-7.php" class="edit" aria-label="Изменить Contact Form 7">Изменить</a>
    )
  • $plugin_file — путь к основному файлу плагина в формате папка-плагина/имя-файла, т.е. от папки плагинов.

    contact-form-7/wp-contact-form-7.php

    Достаточно простой способ получить такой путь — скопировать его из атрибута data-plugin, открыв исходный код страницы:

Измените список важных плагинов в переменной $important_plugins и забудьте о лишних проблемах от заказчика.

campusboy 1844 — wp-plus.ru

WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.