Я использую WordPress 3.0.5 и проверил с 3.1rc4. В основном файле PHP моего плагина, когда я пытаюсь вызвать is_plugin_active, я получаю Call to undefined function is_plugin_active()
. Я могу вызвать add_action и add_filter. Что я должен проверить / изменить, чтобы это исправить?
Это происходит внутри админа на странице плагинов. Вверху моего основного файла плагина, который у меня есть, if (function_exists('is_plugin_active')) {
который всегда возвращает false.
Я также не вижу функции из моего основного файла плагинов в других плагинах (если это помогает).
plugins
customization
plugin-development
деревенщина
источник
источник
function_exists('is_plugin_active')
false при вызове из основного файла плагина вне метода, но true при вызове внутри метода, который вызывается дляactivated_plugin
действия.Ответы:
Это потому, что файл, в котором определена is_plugin_active () -
wp-admin/includes/plugin.php
- загружается только в админке после загрузки вашего плагина.Таким образом, вы можете вызвать его только после запуска admin_init:
источник
Вы можете вызывать is_plugin_active () в шаблонах, а также на пользовательских страницах, что может быть полезно для связанных плагинов (т. Е. Для работы моего нового плагина требуется плагин 'xyz'). Вам необходимо вручную включить файл plugin.php, как указано в документации is_plugin_active () в Кодексе.
Вот функциональный пример, который я использую в своих дополнительных пакетах дополнений, чтобы убедиться, что бесплатный базовый плагин активен перед вызовом объекта дополнения. Требуется наличие определенных хуков и фильтров в базовом плагине, иначе произойдет сбой.
Кроме того, если у вас есть проблемы с is_plugin_active () из-за входа в систему активного администратора, скорее всего, потому что вы тестируете до запуска admin_init. admin_menu запускается перед admin_init и выполнение тестов в admin_menu «укусило» меня раньше. Имя «admin_init», которое кажется мне нелогичным, так как admin_menu уже запущено. Я считаю, что init - это «первое, что нужно запустить» ... может быть, admin_kinda_init () будет лучше. :)
источник
include_once(ABSPATH.'wp-admin/includes/plugin.php');
сделало трюк для меня. Благодарность!Быстрый и грязный обходной путь будет дублировать функцию вручную:
Он довольно короткий, поэтому его не должно быть слишком сложно реализовать в собственном коде в качестве обходного пути.
источник
Просто и легко. Взято из WP
а затем любые случаи
получить проверку функции. ТАК больше нет ошибок.
источник
requireonce
вам, вероятно, не нужно проверять функцию ...?Я предпочел ответ Тома Ожера о том, как определить свою собственную функцию is_plugin_active вместо того, чтобы включать plugin.php. Однако использование одного и того же имени функции вызвало сбой в моей области администратора. Использование другого имени функции решило это:
источник
Вы используете
is_plugin_active
внутри администратора или интерфейс? Я уверен, чтоis_plugin_active
это только функция администратора, которая находится внутри wp-admin / includes / plugin.php.Кроме того, использует ли ваш основной файл плагина Wordpress File Header ? Ваш плагин включается после загрузки вышеуказанного файла plugin.php?
источник
Для отладки активных плагинов:
Чтобы проверить конкретный плагин:
Акция называется "
active_plugins
" IIRC.источник
Ни одно из этих решений не помогло мне, но это помогло:
Я нашел это решение на codebangers.com
источник