Intereting Posts

Объявить зависимость плагина

Я написал собственный плагин, который использует определенный сторонний код плагина, поэтому я хочу объявить, что мой плагин зависит от этого стороннего плагина, возможно ли это? Каким будет нормальный подход к этой проблеме?

Solutions Collecting From Web of "Объявить зависимость плагина"

Это невозможно в ядре. Есть несколько способов приблизиться к этому.

1. plugins_loaded в plugins_loaded чек, чтобы увидеть, существует ли X из вашего плагина зависимостей.

 add_action('plugins_loaded', 'wpse120377_load'); function wpse120377_load() { if (!class_exists('Some_Class_From_Another_Plugin')) { // dependency not installed, bail return; } // load the rest of your plugin stuff here } 

plugins_loaded к plugins_loaded : каждый plugins_loaded плагин будет загружен этой точкой. Только в (или после) плагинах загружаются огни, которые вы можете выполнить точную проверку зависимости.

2. Посмотрите, поддерживает ли плагины крюки

Возьмите сообщения 2 сообщения . Он обеспечивает крючок, называемый p2p_init который запускается при его загрузке. Если ваш плагин зависимостей делает что-то подобное, вам не нужно подключаться к plugins_loaded и делать чек. Просто подключитесь к действию init плагинов (или что-то еще) и загрузите свою функциональность оттуда.

 add_action('p2p_init', 'wpse120377_load2'); function wpse120377_load2() { // load your plugin } 

3. Путь «Ницца к пользователю»

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

 add_action('plugins_loaded', 'wpse120377_load3'); function wpse120377_load3() { if (!class_exists('Some_Class_From_Another_Plugin')) { // dependency not installed, show an error and bail add_action('admin_notices', 'wpse120377_error'); return; } // load the rest of your plugin stuff here } function wpse120377_error() { ?> <div class="error"> <p> <?php _e('{PLUGIN NAME} requires {ANOTHER PLUGIN}. Please install it.', 'wpse'); ?> </p> </div> <?php }