WordPress славится своей гибкостью и возможностью расширения с помощью плагинов. Но иногда установка взаимосвязанных плагинов может превратиться в головную боль. К счастью, в версии WordPress 6.5 появилась новая функция «Зависимости плагинов«, которая значительно упрощает этот процесс. В этой статье узнаем как работают Зависимости Плагинов в WordPress.
До сих пор установка плагинов, зависящих от других, требовала ручной проверки и активации необходимых компонентов. Новая функция «Зависимости плагинов» автоматизирует этот процесс, обеспечивая более плавную и безошибочную работу.
Как это работает?
Разработчики плагинов теперь могут указывать свои зависимости с помощью нового заголовка «Requires Plugins» (Требуемые плагины). В этом заголовке указывается список необходимых плагинов в формате слагов WordPress, разделенных запятыми. Например,
или my-plugin
shop, payment-gateway
. Не путайте слаг с записью такого вида my-plugin/my-plugin.php
/**
* Plugin Name: Express Payment Gateway Checkout for Shop
* Requires Plugins: shop, payment-gateway
*/
Преимущества новой функции:
- Удобство установки: Больше не нужно вручную искать и активировать зависимые плагины. Все происходит автоматически при установке основного плагина.
- Меньше ошибок: Устраняется риск забыть активировать зависимость, что могло привести к некорре рабочей функции основного плагина.
- Улучшенное управление плагинами: Теперь вы можете легко видеть, какие плагины зависят от других, упрощая процесс обновления, деактивации и удаления.
Требования к зависимостям в WordPress 6.5
Теперь, когда мы разобрались с принципом работы новой функции, давайте углубимся в технические детали и требования к зависимым и базовым плагинам.
Зависимые плагины (addons)
- Установка: Установка зависимого плагина невозможна, пока не будут установлены все его базовые зависимости.
- Активация: Активация зависимого плагина также блокируется до тех пор, пока не будут активированы все его базовые зависимости.
Базовые плагины (dependencies)
- Деактивация: Деактивация базового плагина невозможна, если от него зависят активные плагины.
- Удаление: Удаление базового плагина невозможна, если от него зависят установленные плагины.
Что происходит при нарушении зависимостей?
Если базовый плагин удаляется через FTP или другой инструмент управления файлами, в панели управления WordPress появится уведомление о том, что существуют неактивированные или неустановленные зависимости. Кроме того, в строке каждого зависимого плагина, чьи зависимости нарушены, появится сообщение об ошибке.
Обновление плагина с новой зависимостью
При обновлении плагина, в котором появилась новая зависимость, само обновление будет разрешено, а зависимый плагин останется активным. Однако, в панели управления появится уведомление о том, что необходимо установить и/или активировать недостающие зависимости.
Круговые зависимости
Круговая зависимость возникает, когда два или более плагина взаимно требуют друг друга.
Например: Плагин A требует Плагин B, Плагин B требует Плагин C, а Плагин C требует Плагин A.
Функция «Зависимости плагинов» умеет обнаруживать круговые зависимости и отображает уведомление для пользователей о том, что требования к плагинам некорректны. Такие плагины не могут быть активированы, и пользователям рекомендуется обратиться к авторам плагинов для устранения циклической зависимости.
Нужно ли по-прежнему использовать защитное программирование?
Да. Функция «Зависимости плагинов» упрощает для пользователей установку и активацию необходимых компонентов, а также информирует их о нарушении зависимостей. Это означает, что авторам плагинов больше не нужно самостоятельно проверять наличие зависимостей и выводить уведомления.
Однако, на данный момент функция «Зависимости плагинов» не поддерживает проверку минимальной или максимальной версии зависимых плагинов, а также не учитывает порядок их загрузки. Поэтому разработчикам по-прежнему рекомендуется использовать функции function|class|interface_exists()
и проверки версий в тех случаях, когда их плагин полагается на конкретный функционал, доступный в определенное время.
Погрузитесь в увлекательный мир веб разработки и дизайна с моими эксклюзивными курсами на Udemy! Я их разработал с душой и учел все нюансы. Сейчас активированы скидки до 90%! Получите доступ к знаниям высокого качества от $9!
Ограничения функции зависимостей плагинов в WordPress 6.5
Новая функция, безусловно, является шагом вперед, но важно понимать ее текущие ограничения:
Плагины, размещенные на WordPress.org:
- Зависимые плагины, размещенные на WordPress.org, могут объявлять зависимости только на другие плагины, также размещенные на WordPress.org. Если ваш плагин, размещенный на WordPress.org, требует сторонние плагины, на данный момент не рекомендуется использовать заголовок «Requires Plugins«.
Плагины, не размещенные на WordPress.org:
- Зависимые плагины, не размещенные на WordPress.org, могут объявлять зависимости от любых других плагинов, независимо от их размещения. Однако, пользовательский интерфейс не предоставит ссылку для установки сторонних зависимостей, и их установка по-прежнему должна выполняться вручную.
Must-Use плагины как зависимости:
- Использование Must-Use плагинов в качестве зависимостей в настоящее время официально не поддерживается ядром WordPress. Обсуждение этой возможности продолжается в треде #60504, и мы предоставим дополнительную информацию, когда будут приняты решения о потенциальной будущей поддержке.
Темы, требующие плагины:
- Темы, требующие плагины, на данный момент не поддерживаются функцией «Зависимости плагинов». Разработчикам тем по-прежнему следует использовать существующие проверки и сообщения.
Новый Хук Фильтр
Помимо автоматизации установки и активации зависимых плагинов, функция «Зависимости плагинов» предоставляет разработчикам дополнительный уровень гибкости с помощью нового хука фильтра wp_plugin_dependencies_slug
.
Для чего нужен фильтр wp_plugin_dependencies_slug
?
Этот фильтр позволяет разработчикам плагинов изменять слаги зависимостей. Рассмотрим пример. Допустим, зависимый плагин объявляет зависимость от my-plugin
, но существует также премиум-версия этого плагина my-plugin-pro
. С помощью фильтра можно переписать зависимость на my-plugin-pro
, чтобы функция «Зависимости плагинов» ее распознала и установила премиум-версию.
Параметры фильтра:
string $slug
– Слаг зависимости.
add_filter( 'wp_plugin_dependencies_slug', 'convert_myplugin_to_myplugin_pro' );
function convert_myplugin_to_myplugin_pro( $slug ) {
if ( 'my-plugin' === $slug ) {
$slug = 'my-plugin-pro';
}
return $slug;
}
Класс WP_Plugin_Dependencies
В ядро WordPress был добавлен новый класс WP_Plugin_Dependencies
. Он предоставляет набор методов для проверки и управления зависимостями плагинов из вашего собственного кода.
Доступные методы API:
static ::initialize()
— Инициализирует функцию «Зависимости плагинов», считывая зависимости из заголовка «Requires Plugins» и загружая данные из API плагинов для зависимостей. Выполняется только один раз за сеанс.static ::has_dependents( $plugin_file )
— Определяет, есть ли у плагина зависимые плагины.- Параметры:
string $plugin_file
— Файл плагина относительно папки plugins.
- Возвращает:
bool
— Имеет ли плагин зависимые плагины.
- Параметры:
static ::has_dependencies( $plugin_file )
— Определяет, имеет ли плагин зависимости от других плагинов.- Параметры:
string $plugin_file
— Файл плагина относительно папки plugins.
- Возвращает:
bool
— Имеет ли плагин зависимости от других плагинов.
- Параметры:
static ::has_active_dependents( $plugin_file )
— Определяет, есть ли у плагина активные зависимые плагины.- Параметры:
string $plugin_file
— Файл плагина относительно папки plugins.
- Возвращает:
bool
— Имеет ли плагин активные зависимые плагины.
- Параметры:
static ::get_dependents( $slug )
— Получает пути к файлам плагинов, которые зависят от данной зависимости.- Параметры:
string $slug
— Слаг зависимости.
- Возвращает:
array
— Массив путей к файлам зависимых плагинов относительно папки plugins.
- Параметры:
static ::get_dependencies( $plugin_file )
— Получает слаги плагинов, от которых зависит данный плагин.- Параметры:
string $plugin_file
— Файл зависимого плагина относительно папки plugins.
- Возвращает:
array
— Массив слагов зависимых плагинов.
- Параметры:
static ::get_dependent_filepath( $slug )
— Получает путь к файлу зависимого плагина.- Параметры:
string $slug
— Слаг зависимого плагина.
- Возвращает:
string|false
— Путь к файлу зависимого плагина относительно папки plugins или false, если у плагина нет зависимостей.
- Параметры:
static ::get_dependency_filepath( $slug )
— Получает путь к файлу зависимости относительно папки плагина.- Параметры:
string $slug
— Слаг зависимости.
- Возвращает:
string|false
— Если зависимость установлена, путь к ее файлу относительно папки plugins, иначе false.
- Параметры:
static ::has_unmet_dependencies( $plugin_file )
— Определяет, есть ли у плагина невыполненные зависимости.- Параметры:
string $plugin_file
— Файл плагина относительно папки plugins.
- Возвращает:
bool
— Имеет ли плагин невыполненные зависимости.
- Параметры:
static ::has_circular_dependency( $plugin_file )
— Определяет, есть ли у плагина круговая зависимость.- Параметры:
string $plugin_file
— Файл плагина относительно папки plugins.
- Возвращает:
bool
— Имеет ли плагин круговую зависимость.
- Параметры:
static ::get_dependent_names( $plugin_file )
— Получает названия плагинов, которые зависят от данного плагина.- Параметры:
string $plugin_file
— Файл плагина относительно папки plugins.
- Возвращает:
array
— Массив названий зависимых плагинов.
- Параметры:
Заключение. Зависимости Плагинов в WordPress
Новая функция «Зависимости плагинов» в WordPress 6.5 знаменует собой значительный шаг вперед в упрощении управления взаимосвязанными плагинами. Она обеспечивает более удобную установку и активацию, снижает вероятность ошибок и помогает пользователям поддерживать актуальность своих сайтов.
Разработчики плагинов также получают ряд преимуществ, таких как автоматическая проверка зависимостей, возможность настройки поведения с помощью фильтров и доступ к новому API для работы с зависимостями из кода плагинов.
В целом, «Зависимости плагинов» — это ценное дополнение к экосистеме WordPress, которое обещает улучшить работу как для пользователей, так и для разработчиков.
Ожидается, что эта функция будет развиваться в будущем, и мы с нетерпением ждем возможности увидеть новые возможности, которые она может предложить.