Как отключить деактивацию плагинов в панели администратора WordPress

Одна из самых выгодных сторон WordPress, это, безусловно, работа с плагинами. С помощью плагинов можно быстро выполнить любую задачу как в лице разработчика, так и в лице рядового пользователя. Зачастую при создании клиентских сайтов мы как разработчики используем крайне важные для сайта плагины, позволяющие подключить определенную функциональность. Недавно наша команда столкнулась с серьезной проблемой: один из сайтов клиента перестал работать. Сайдбар не хотел грузиться полностью, на страницах с отдельными записями были пропущены некоторые элементы. В итоге мы выяснили, что один из новых сотрудников, который был поверхностно знаком с WordPress, деактивировал некоторые из плагинов, которые требовались для того, чтобы сайт функционировал должным образом. Мы вошли в систему и активировали те плагины, которые были отключены — проблема тем самым была решена, однако не был решен вопрос: как обезопасить себя от появления таких ситуаций в дальнейшем? В этой статье мы покажем вам, как отключить деактивацию плагинов в панели управления WordPress (только для определенных плагинов).

Теоретически вы можете воспользоваться плагином Members для создания новой пользовательской роли. Однако клиент, который работал с нами, отказался идти по этому маршруту. Он нанимал специального сотрудника для того, чтобы тот работал с блогом и средствами социального общения, таким образом, ограничение доступа — не самый подходящий вариант. Клиент хотел, чтобы этот сотрудник мог активировать/деактивировать плагины по своему усмотрению. Мы должны были найти путь, чтобы одновременно угодить клиенту и защитить себя от повторения такой истории в будущем. Благодаря Стиву Тейлору мы нашли фрагмент кода, который позволяет удалить ссылку «Деактивировать» для указанных плагинов. Также этот код удаляет ссылку «Редактировать» для всех плагинов, поскольку мы не хотим, чтобы наш клиент мог изменять файлы плагинов через редактор.

Таким образом, все, что нам понадобилось сделать, это вставить следующий код в файл functions.php:

add_filter( 'plugin_action_links', 'disable_plugin_deactivation', 10, 4 );
function disable_plugin_deactivation( $actions, $plugin_file, $plugin_data, $context ) {
	// Remove edit link for all
	if ( array_key_exists( 'edit', $actions ) )
		unset( $actions['edit'] );
	// Remove deactivate link for crucial plugins
	if ( array_key_exists( 'deactivate', $actions ) && in_array( $plugin_file, array(
		'facebook-open-graph-meta-in-wordpress/fbogmeta.php',
		'wp-pagenavi/wp-pagenavi.php'
	)))
		unset( $actions['deactivate'] );
	return $actions;
}

Теперь вы должны изменить массив $plugin_file, в котором содержится список определенных плагинов. Путь к файлу является относительным: /wp-content/plugins/. В примере, приведенном выше, строка ‘facebook-open-graph-meta-in-wordpress/fbogmeta.php’ указывает на файл, расположенный в папке facebook-open-graph-meta-in-wordpress, находящийсяв папке с плагинами. Вы можете добавить к списку любое число плагинов.

Указанный прием называется созданием шортката; по факту он не предотвращает физическую деактивацию. Мы всего лишь скрыли ссылку «Деактивировать». Любой человек, обладающий достаточными знаниями WordPress, легко может вызвать деактивирующий URL. С другой стороны, клиент может быть продвинутым в плане ведения сайтов, так что он всегда может удалить плагины через FTP.

Вы работаете над темой, которая требует наличия определенного функционала для корректной работы? Тогда приведенный выше код — для вас!

http://www.wpbeginner.com/wp-tutorials/how-to-disable-plugin-deactivation-from-wordpress-admin-panel/

Блог про WordPress
Комментарии: 8
  1. Алексей

    Обычно я не оставляю комментариев в блогах. Лет за 7 оставил от силы пару десятков. Ппричина — на всех блогах темы одни и те же. Кто-то один сталкивается с проблемой, находит решение и выкладывает в своем блоге. А через пару недель — только безрукий не имеет статьи, нагло содранной с чужого блога.

    ——————————————————————

    Но мимо этого блога пройти не смог! В этот блог на этой неделе я попадаю уже десятый раз, по разным поисковым запросам. Несколько решений, что здесь прочел — сразу же пригодились, особенно — описанное в этой статье! Клиенты, змеюки, повадились экспериментировать — то шаблон от Joomla попытаются затолкать(я думал он для wordpress…), то виджетов понаставят такое количество, что в админку зайти невозможно, все рябит…Заблокировал сразу на 11 сайтах плагины, отключил rss… Наверняка найду еще что-то новое здесь! Спасибо! Огромное спасибо!

    1. Дмитрий (автор)

      Согласен, сдирать статьи и тупо рерайтить их — это полная чушь. Ну в таких блогах обычно и рекламы много, их ведут ради собственного заработка. У меня рекламы нет вообще, потому что меня этот аспект не прельщает.

      Я рад, что мои статьи помогают людям — ради этого и веду блог! Спасибо вам за добрый отзыв!!

  2. Алексей

    Кстати, по существу дела — плагины

    wp-table-reloaded

    rus-to-lat.php

    seo-without-category.php

    не подойдут для такого варианта. Сразу после такого способа блокировки — выдает "Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in и тут путь до файла functions.php с указанием строки, где прописаны именно эти плагины. Если закомментировать (или убрать) эти строки(с указанием только этих трех плагинов) — то все нормально. Уточню — сайт на Денвере.

    1. Дмитрий (автор)

      Я обычно работаю с WAMP'ом, поэтому посмотрю еще там. Такая ошибка обычно появляется тогда, когда строку забывают взять в кавычки, в итоге парсер думает, что это константа. Я думаю, что комментирование в данном случае — лучший выход из ситуации.

  3. Алексей

    Ошибку нашел через минуту после отправки сообщения, стыдно мне должно быть за невнимательность… В одной строке забыл запятую поставить. Так что — вариант рабочий, все отлично.

    Клиенты уже сегодня звонили, скромно интересовались, почему не могут деактивировать плагины. На что и получили достаточно ёмкий ответ. Однако, на днях пришлось долго и нудно объясняться с одним дядей-экспериментатором, который без моего ведома поставил новый шаблон(тему) на блог, и его крайне удивило, что весь дизайн сайта перекосило…Нет ли случайно возможности подобным или другим образом удалить или прикрыть возможность смены(активации) шаблона?

  4. Дмитрий (автор)
    add_action('admin_init', 'd_lock_theme');
     
    function d_lock_theme() {
     
    	global $submenu, $userdata;
     
    	get_currentuserinfo();
     
    	if ($userdata->ID != 1) {
     
    		unset($submenu['themes.php'][5]);
     
    		unset($submenu['themes.php'][15]);
     
    	}
     
    }

    Не знаю, сработает или нет. Код для functions.php.

  5. евгений

    Подскажите, а как тогда отключить обновление плагина, или это в шапке плагина достаточно стереть URL? Спасибо.

    1. Дмитрий (автор)

      Удаление URL должно помочь.

Добавить комментарий для Алексей Отменить ответ

Получать новые комментарии по электронной почте.