Як заборонити деактивацію важливих плагінів?
Часто при написанні додаткового функціоналу для сайту ми використовуємо плагіни для прискорення розробки. Хто створює сайти на замовлення, напевно, стикалися з ситуацією, коли надто доробливий і цікавий замовник відключав потрібний плагін і сайт позбавлявся потрібного функціоналу або просто переставав працювати.
Щоб позбавитися проблем такого роду, можна просто прибрати кнопку «деактивувати» у плагінів, які обов’язково потрібні для роботи сайту. А також прибрати чекбокс, щоб не можна було деактивувати плагін через групові дії.
На скріншоті показано:
Як відсутня кнопка «деактивувати» і чекбокс у плагінів: 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 та забудьте про зайві проблеми від замовника.