В практике разработки на WordPress часто возникает задача создать плагин, который зависит от функционала другого плагина. Это может быть связано с необходимостью расширить функциональность, добавить интеграцию или обеспечить дополнительный уровень безопасности. В этой статье мы подробно рассмотрим, как правильно реализовать зависимый плагин, чтобы избежать ошибок и конфликтов, а также приведём примеры кода и рекомендации по проверке наличия зависимостей.
Что такое зависимый плагин и зачем он нужен
Зависимый плагин — это расширение, которое корректно работает только при условии, что другой плагин установлен и активирован. Например, если вы разрабатываете плагин, который добавляет новые функции к WooCommerce, ваш плагин зависит от WooCommerce.
Создание зависимого плагина позволяет:
- Использовать API и функции другого плагина;
- Обеспечить модульность и разделение ответственности;
- Избежать дублирования кода и конфликтов;
- Упростить обновления и сопровождение.
Однако важно грамотно проверять, что зависимость доступна, и корректно уведомлять администратора сайта, если она отсутствует.
Как проверить наличие и активность плагина-зависимости
Самый простой и надёжный способ — использовать функцию is_plugin_active() из WordPress, которая позволяет проверить, активирован ли необходимый плагин.
Для этого в вашем плагине подключите файл plugin.php, если он не загружен, и выполните проверку:
if ( ! function_exists( 'is_plugin_active' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
add_action( 'admin_notices', 'wpmax_dependency_notice' );
return;
}
function wpmax_dependency_notice() {
echo '<div class="notice notice-error">';
echo '<p>Для работы плагина WPMax необходимо установить и активировать WooCommerce.</p>';
echo '</div>';
}
В этом примере мы проверяем, активен ли плагин WooCommerce (файл его главного плагина woocommerce.php должен находиться в папке woocommerce). Если нет — выводим административное уведомление и прекращаем дальнейшую загрузку кода нашего плагина.
Пример создания зависимого плагина WPMax с расширением WooCommerce
Рассмотрим минимальный пример плагина, который добавляет вкладку на страницу товара WooCommerce, но будет работать только если WooCommerce активен.
<?php
/**
* Plugin Name: WPMax Woo Extension
* Description: Расширение WooCommerce от WPMax
* Version: 1.0
* Author: WPMax
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Защита от прямого доступа
}
if ( ! function_exists( 'is_plugin_active' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
add_action( 'admin_notices', 'wpmax_woo_extension_dependency_notice' );
return;
}
function wpmax_woo_extension_dependency_notice() {
echo '<div class="notice notice-error"><p>WPMax Woo Extension требует активный WooCommerce.</p></div>';
}
// Добавляем вкладку на страницу товара
add_filter( 'woocommerce_product_tabs', 'wpmax_add_custom_product_tab' );
function wpmax_add_custom_product_tab( $tabs ) {
$tabs['wpmax_custom_tab'] = array(
'title' => __( 'WPMax Info', 'wpmax' ),
'priority' => 50,
'callback' => 'wpmax_custom_product_tab_content'
);
return $tabs;
}
function wpmax_custom_product_tab_content() {
echo '<h2>Информация от WPMax</h2>';
echo '<p>Это дополнительная вкладка, добавленная плагином WPMax Woo Extension.</p>';
}
Данный код демонстрирует простой пример расширения функционала WooCommerce, при этом корректно проверяется зависимость и при её отсутствии пользователь админки получит уведомление.
Как уведомлять пользователя о необходимости установки плагина-зависимости
Уведомления должны быть заметными, но не раздражающими. Рекомендуется использовать хук admin_notices и выводить сообщение с классом notice notice-error для ошибок.
Можно добавить ссылку на страницу установки плагина в официальном репозитории WordPress с помощью функции admin_url('plugin-install.php?s=woocommerce&tab=search&type=term'). Например:
function wpmax_dependency_notice() {
$install_url = admin_url('plugin-install.php?s=woocommerce&tab=search&type=term');
echo '<div class="notice notice-error is-dismissible">';
echo '<p>Для работы плагина WPMax необходимо <a href="' . esc_url($install_url) . '" target="_blank">установить и активировать WooCommerce</a>.</p>';
echo '</div>';
}
<Такой подход упрощает администратору задачу и повышает юзабилити.
Дополнительные советы по работе с зависимыми плагинами
Используйте функцию wpmax_plugin_dependecy_check()
Рекомендуется вынести проверку зависимости в отдельную функцию, чтобы использовать её в разных местах вашего кода:
function wpmax_plugin_dependency_check( $plugin_path ) {
if ( ! function_exists( 'is_plugin_active' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
return is_plugin_active( $plugin_path );
}
Обрабатывайте отсутствие зависимостей на уровне функций
Если в вашем плагине есть функции, завязанные на другой плагин, обязательно проверяйте их наличие с помощью function_exists() или class_exists() перед вызовом.
Интеграция с WPMax
Для удобства управления и расширения функционала можно использовать плагины от WPShop, например, Clearfy Pro, который помогает оптимизировать плагины и отключать ненужный функционал, что особенно полезно при работе с зависимостями.
Заключение
Создание зависимого плагина в WordPress требует внимания к проверкам и корректной обработке ситуаций, когда плагин-зависимость не активен. Используя функции WordPress для проверки активных плагинов и выводя понятные уведомления, вы гарантируете стабильную работу и удобство для пользователей. Приведённые в статье примеры помогут быстро интегрировать зависимый плагин и избежать типичных ошибок.