Найти в Дзене
ИТ Дилетант

Запуск внешней функции при активации плагина Wordpress

Любой плагин в WordPress активируется функцией activate_plugin(), при запуске которой срабатывает хук activate_(plugin). Обычно этот механизм используется внутри самого плагина, для установки и инициализации его функций и параметров. Однако, использовать хук activate_(plugin) можно за пределами плагина. Далее рассмотрим пример такого использования данного хука. В нашем случае клиент на своем сайте использует простой и легкий плагин WordPress WPO Tweaks by Fernando Tellado для оптимизации работы WordPress и настройки кэширования элементов. При активации данный плагин вносит изменения в файл .htaccess с необходимыми настройками. В том числе, в раздел настроек модуля mod_expires.c в файл записывается строка ExpiresDefault "access plus 1 month" которая определяет время кэширования по умолчанию, а далее задаются настройки для некоторых типов элементов (например: ExpiresByType image/jpg "access plus 1 month"). При стандартных настройках плагина получается, что время кэширования текстовых ст

Любой плагин в WordPress активируется функцией activate_plugin(), при запуске которой срабатывает хук activate_(plugin). Обычно этот механизм используется внутри самого плагина, для установки и инициализации его функций и параметров. Однако, использовать хук activate_(plugin) можно за пределами плагина. Далее рассмотрим пример такого использования данного хука.

В нашем случае клиент на своем сайте использует простой и легкий плагин WordPress WPO Tweaks by Fernando Tellado для оптимизации работы WordPress и настройки кэширования элементов. При активации данный плагин вносит изменения в файл .htaccess с необходимыми настройками. В том числе, в раздел настроек модуля mod_expires.c в файл записывается строка ExpiresDefault "access plus 1 month" которая определяет время кэширования по умолчанию, а далее задаются настройки для некоторых типов элементов (например: ExpiresByType image/jpg "access plus 1 month").

При стандартных настройках плагина получается, что время кэширования текстовых страниц text/html, text/plain и text/xml не определены в индивидуальном порядке и работают в соответствии с настройкой ExpiresDefault. Так как клиент на главной странице своего сайта использует информационные блоки, которые могут обновляться чаще чем 1 раз в месяц. Нам необходимо внести дополнительные изменения в файл .htaccess в раздел созданный плагином таким образом, чтобы при обновлении плагина наши изменения не перетирались.

Переходим к практике.

Активация плагина осуществляется через хук register_activation_hook() который в свою очередь запускает функцию wpo_tweaks_htaccess самого плагина. Мы не можем переопределить данную функцию, так как автор плагина может изменить её содержимое в будущем. Вместо этого будем использовать хук activate_(plugin) который разместим в файле function.php темы WordPress.

В нашем случае, строка с данным хуком будет выглядеть следующим образом: add_action('activate_wpo-tweaks/wordpress-wpo-tweaks.php', 'wpo_tweaks_htaccess_add', 20); В первом параметре, после activate_ указываем путь до файла плагина, далее указываем название функции которую будем запускать после активации плагина и задаем приоритет запуска после основной функции плагина.

Создаем функцию wpo_tweaks_htaccess_add() которая считает нужный раздел из файла .htaccess, внесет необходимые изменения в текст и запишет обратно.

Также оборачиваем нашу функцию и хук в IF с проверкой !function_exists( 'wpo_tweaks_htaccess' ), что предотвратит запуск хука если плагин уже активирован.

Полностью код будет выглядеть следующим образом:

if ( !function_exists( 'wpo_tweaks_htaccess' ) ) {

// Функция добавляет необходимые строки в раздел файла .htaccess создаваемый плагином WordPress WPO Tweaks
function wpo_tweaks_htaccess_add() {

// Задаем расположение файла .htaccess
$ruta_htaccess = get_home_path() . '.htaccess';

// Считываем из .htaccess строки записанные плагином
$lines = extract_from_markers($ruta_htaccess, 'WordPress WPO Tweaks by Fernando Tellado');

// Добавляем свои строки в массив строк плагина
if( is_array($lines) ){

// Добавляем правила ExpiresByType для кэширования элементов
$lines[] = 'ExpiresByType text/html "access plus 0 seconds"';
$lines[] = 'ExpiresByType text/plain "access plus 0 seconds"';
$lines[] = 'ExpiresByType text/xml "access plus 0 seconds"';
}

// Записываем дополненный массив в .htaccess
insert_with_markers( $ruta_htaccess, 'WordPress WPO Tweaks by Fernando Tellado', $lines );
}

// Задаем название нашей функции и приоритет для запуска при активации плагина
add_action('activate_wpo-tweaks/wordpress-wpo-tweaks.php', 'wpo_tweaks_htaccess_add', 20);

}


Согласимся, что данный способ не идеален и имеет ряд недостатков. Также можно порекомендовать клиенту использовать другие плагины для управления кэшированием которые позволяют задавать параметры непосредственно через панель администратора WordPress. Тем не менее, в данном случае интересен не факт решения задачи, а имеющая функциональная возможность которая позволяет более точечно работать с устанавливаемыми плагинами.