Зависимости плагинов в WordPress: новая функция в WP 6.5

Зависимости плагинов в WordPress 6.5

Расширяемость через плагины и API хуки — это основная особенность WordPress. Множество плагинов служат дополнениями к другим плагинам. Новая функция "Зависимости плагинов" упрощает процесс установки и активации дополнительных плагинов (зависимых) и плагинов, от которых они зависят (зависимости).

Содержание

  • Новый заголовок плагина — Требуемые плагины
  • Требования
  • Зависимые плагины
  • Зависимости плагинов
  • Что делать, если зависимость больше не существует?
  • Что делать, если плагин получает новую зависимость во время обновления?
  • Что происходит, если есть циклические зависимости?
  • Нужен ли "защитный код" для проверки зависимостей?
  • WP-CLI и функциональность зависимостей плагина
  • Ограничения
  • Плагины, размещенные в каталоге WordPress.org
  • Плагины, не размещенные в каталоге WordPress.org
  • Плагины, которые обязательно должны использоваться
  • Темы, требующие плагины
  • Новый фильтр
  • Изменения пользовательского интерфейса
  • Плагины > Установленные плагины
  • Плагины > Добавить новый
  • Процесс развертывания
  • Новый класс WP_Plugin_Dependencies

Новый заголовок плагина — Требуемые плагины

Вп Introduced новый заголовок Requires Plugins, который должен содержать список слогов (никаких пробелов и символов) плагинов, от которых зависит текущий плагин. Пример: my-plugin. Формат my-plugin/my-plugin.php не поддерживается.

Пример использования нового заголовка

/**
 * Название плагина: Express Payment Gateway Checkout for Shop
 * Требуемые плагины: shop, payment-gateway
 */

Требования

Зависимые плагины

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

  • Их нельзя устанавливать, пока не установлены зависимости.
  • Их нельзя активировать, пока не активированы зависимости.

Зависимости плагинов

К зависимостям плагинов применяются следующие требования:

  • Их нельзя деактивировать, пока активны зависимые плагины.
  • Их нельзя удалить, пока установлены зависимые плагины.

Что делать, если зависимость больше не существует?

Если зависимость удалена вручную (например, через FTP), на экранах управления плагинами появится уведомление о том, что зависимости отсутствуют. Зависимые плагины, у которых не выполнены требования, также получат уведомление об ошибке.

Что делать, если плагин получает новую зависимость во время обновления?

Обновление плагина будет разрешено, и зависимый плагин останется активным. Однако пользователю будет показано уведомление о том, что для установки и/или активации отсутствуют зависимости.

Что происходит, если есть циклические зависимости?

Циклическая зависимость возникает, когда один плагин зависит от другого, который в свою очередь зависит от третьего плагина, а он — обратно от первого плагина. Например: Плагин A требует Плагин B, который требует Плагин C, который требует Плагин A.

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

Нужен ли "защитный код" для проверки зависимостей?

Нет. Функциональность зависимостей плагина упрощает установку и активацию зависимых плагинов, поэтому авторам плагинов больше не нужно использовать проверки и уведомления, когда их зависимости не установлены или не активированы.

Тем не менее, на данный момент функциональность зависимостей не поддерживает минимальные или максимальные версии для зависимостей и не учитывает порядок загрузки плагинов. Поэтому авторам плагинов настоятельно рекомендуется продолжать использовать функции function_exists(), class_exists() и проверку версий, если их плагин зависит от определенной функциональности.

WP-CLI и функциональность зависимостей плагина

Зависимости плагина не препятствуют установке зависимых плагинов без их зависимостей с помощью WP-CLI, поскольку предполагается, что пользователи WP-CLI — это опытные пользователи, осознающие наличие зависимостей.

Тем не менее, чтобы избежать незамеченных пропусков зависимостей, завис��мые плагины не могут быть активированы через WP-CLI до тех пор, пока их зависимости не будут активированы. Это касается команды wp plugin activate --all, которая может потребовать нескольких запусков, если зависимый плагин по алфавиту находится до своих зависимостей.

Основные разработчики плана улучшают WP-CLI и функциональность зависимостей. На данный момент это находится в стадии улучшения и разработки (для версии WP 6.5).

Ограничения

Плагины, размещенные в каталоге WordPress.org

Зависимые плагины, размещенные на WordPress.org, могут объявлять зависимости, также размещенные на WordPress.org. Если ваш плагин, размещенный на WordPress.org, требует плагины, которые не размещены там, сейчас рекомендуется не использовать заголовок Requires Plugins.

Плагины, не размещенные в каталоге WordPress.org

Зависимые плагины, не размещенные на WordPress.org, могут объявлять зависимости, как плагины, размещенные на WordPress.org, так и другие. Однако пользовательский интерфейс не предоставит ссылки для установки сторонних зависимостей, и их нужно будет находить и устанавливать вручную.

Плагины, которые обязательно должны использоваться

В настоящее время плагины, которые обязательно должны использоваться, не поддерживаются ядром WordPress. Обсуждение будет продолжено в соответствующем тикете.

Темы, требующие плагины

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

Новый фильтр

Введен новый хук wp_plugin_dependencies_slug, который позволяет изменять слоги зависимостей. Например, если зависимый плагин объявляет my-plugin как зависимость, а есть платная версия my-plugin, то платная версия может отфильтровать слог и преобразовать его в my-plugin-pro, чтобы "Зависимости плагинов" могли это обнаружить.

Пример использования фильтра

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;
}

Изменения пользовательского интерфейса

Плагины > Установленные плагины

Внесены следующие изменения:

  • Строки зависимых плагинов теперь содержат список их зависимостей, связанных с соответствующими модальными окнами для установки и активации зависимости.
  • Строки зависимостей плагинов теперь содержат список их зависимых плагинов.
  • Если у плагина есть разрешенные и неактивные зависимости, ссылка "Активировать" не работает.
  • Если у плагина есть активные зависимые плагины, ссылки "Деактивировать" и "Удалить" не работают.
  • Пакетные действия отключены для плагинов-зависимостей.

Плагины > Добавить новый

Внесены следующие изменения:

  • Если у плагина есть нерешенные зависимости, кнопки "Установить сейчас" и "Активировать" не работают ни на карточке плагина, ни в модальном окне с информацией о плагине.
  • Карточки зависимых плагинов теперь содержат уведомление со списком их зависимостей с ссылкой "Узнать больше" на модальное окно с информацией о зависимости, которое содержит кнопки "Установить сейчас" или "Активировать" (в зависимости от состояния).

    После изменения: Карточка плагина с списком зависимостей и модальными ссылками для установки и активации каждой зависимости. Кнопка "Установить сейчас" отключена до тех пор, пока зависимости не будут установлены.

Процесс развертывания

Из-за унифицированного подхода AJAX, который теперь применяется на экране "Плагины > Добавить новый", активация плагина больше не будет автоматически перенаправлять на страницу "Плагины > Установленные плагины" или на процессы развертывания, реализованные авторами плагинов. Это позволяет пользователям устанавливать и активировать несколько плагинов, не покидая текущий контекст.

Плагины с процессами развертывания обычно включают проверки, чтобы, например, если плагин установлен и активирован через WP-CLI, процесс развертывания запустится, когда пользователь посетит одну из страниц настроек этого плагина. Такие реализации не будут затронуты зависимостями плагинов, как и активация со страницы "Плагины > Установленные плагины" через ссылку "Активировать".

Новый класс WP_Plugin_Dependencies

Введен новый класс WP_Plugin_Dependencies с доступными следующими публичными (API) методами:

::HAS_DEPENDENTS( $PLUGIN_FILE )

Проверяет, есть ли у плагина другие плагины, которые зависят от него.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: bool Указывает, зависит ли от плагина другой плагин.

::HAS_DEPENDENCIES( $PLUGIN_FILE )

Проверяет, есть ли у плагина зависимости от других плагинов.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: bool Указывает, имеет ли плагин зависимости от других плагинов.

::HAS_ACTIVE_DEPENDENTS( $PLUGIN_FILE )

Проверяет, есть ли у плагина активные зависимые плагины.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: bool Указывает, имеет ли плагин активные зависимые плагины.

::GET_DEPENDENTS( $SLUG )

Получает пути файлов плагинов, которые требуют зависимости.

  • Параметр: $slug string - Слог зависимости.
  • Возвращает: array Массив путей файлов зависимых плагинов относительно каталога плагинов.

::GET_DEPENDENCIES( $PLUGIN_FILE )

Получает слоги плагинов, требующих зависимость.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: array Массив слогов зависимых плагинов.

::GET_DEPENDENT_FILEPATH( $SLUG )

Получает путь файла зависимого плагина.

  • Параметр: $slug string - Слог зависимости.
  • Возвращает: string|false Путь файла зависимого плагина относительно каталога плагинов или false, если у плагина нет зависимостей.

::GET_DEPENDENCY_FILEPATH( $SLUG )

Получает путь файла зависимости, относительно каталога плагинов.

  • Параметр: $slug string - Слог зависимости.
  • Возвращает: string|false Если установлено, путь файла зависимости относительно каталога плагинов; в противном случае - false.

::HAS_UNMET_DEPENDENCIES( $PLUGIN_FILE )

Определяет, есть ли у плагина невыполненные зависимости.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: bool Указывает, имеет ли плагин невыполненные зависимости.

::HAS_CIRCULAR_DEPENDENCY( $PLUGIN_FILE )

Определяет, есть ли у плагина циклическая зависимость.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: bool Возвращает true, если у плагина есть циклическая зависимость.

::GET_DEPENDENT_NAMES( $PLUGIN_FILE )

Получает имена плагинов, которые требуют этот плагин.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: array Массив имен зависимых плагинов.

::GET_DEPENDENCY_NAMES( $PLUGIN_FILE )

Получает имена плагинов, требующих для работы данный плагин.

  • Параметр: $plugin_file string - Файл плагина, относительный к каталогу плагинов.
  • Возвращает: array Массив имен требуемых плагинов.

::GET_DEPENDENCY_DATA( $SLUG )

Возвращает данные API для зависимости.

  • Параметр: $slug string - Слог зависимости.
  • Возвращает: array|false Данные API зависимости при успешном выполнении или false в случае ошибки.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *