Як заборонити деактивацію важливих плагінів?

Часто при написанні додаткового функціоналу для сайту ми використовуємо плагіни для прискорення розробки. Хто створює сайти на замовлення, напевно, стикалися з ситуацією, коли надто доробливий і цікавий замовник відключав потрібний плагін і сайт позбавлявся потрібного функціоналу або просто переставав працювати.

Щоб позбавитися проблем такого роду, можна просто прибрати кнопку «деактивувати» у плагінів, які обов’язково потрібні для роботи сайту. А також прибрати чекбокс, щоб не можна було деактивувати плагін через групові дії.

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

  • Як відсутня кнопка «деактивувати» і чекбокс у плагінів: Advanced Custom Fields PRO, 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'] );
		$actions[ 'info' ] = '<b class="musthave_js">Обов'язковий для сайту</b>';
	}

	return $actions;
}

// видаляємо групові дії: деактивувати та видалити
add_filter( 'admin_print_footer_scripts-plugins.php', 'disable_plugin_deactivation_hide_checkbox' );
function disable_plugin_deactivation_hide_checkbox( $actions ){
	?>
	<script>
	jQuery(function($){
		$('.musthave_js').closest('tr').find('input[type="checkbox"]').remove();
	});
	</script>
	<?php
}

До речі, зауважте, що для 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 >Деактивувати</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 та забудьте про зайві проблеми від замовника.

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *