Вопрос или проблема
Мне интересно, возможно ли это или есть другой, более удобный способ сделать это. Google-foo не помог.
Итак, у меня есть два плагина: aa-frontend и aa-site. Мне нужно определить константу или переменную в aa-site/plugin.php и использовать её в aa-frontend/folder/somefile.php.
Попробовал следующее:
function site_wp_features(){
define('AA_PLUGIN_GUTENBERG', false);
}
add_action('plugins_loaded', 'site_wp_features', 0)
Но получаю:
Warning: Use of undefined constant AA_PLUGIN_GUTENBERG
Какие-нибудь идеи?
вместо использования константы, определите переменную как опцию, хранящуюся в таблице wp_options, чтобы она могла быть доступна из любого плагина.
Чтобы гарантировать, что константа определена до того, как она будет использована, вы можете использовать хук действия init
вместо plugins_loaded
, так как init
вызывается после загрузки wp, но до отправки заголовков.
function site_define_constant() {
define('AA_PLUGIN_GUTENBERG', false);
}
add_action('init', 'site_define_constant');
AA_PLUGIN_GUTENBERG
должна быть определена к моменту, когда wp достигнет хука init, и вы больше не должны сталкиваться с предупреждением Use of undefined constant
.
Затем, в aa-frontend/folder/somefile.php
, вы можете получить доступ к константе, как в приведенном ниже коде
if (defined('AA_PLUGIN_GUTENBERG') && AA_PLUGIN_GUTENBERG) {
// Константа определена и установлена в true
} else {
// Константа либо не определена, либо установлена в false
}
Ответ или решение
Определение и использование констант между плагинами в WordPress
Здравствуйте! Вы сталкиваетесь с задачей обмена данными между двумя плагинами в WordPress, что является распространенной практикой при разработке сложных решений. Рассмотрим детали этого процесса на примере описанных плагинов — aa-frontend и aa-site.
Описание проблемы
Вам необходимо определить константу или переменную в aa-site/plugin.php и затем использовать её в aa-frontend/folder/somefile.php. Вы пытались использовать хук plugins_loaded
для этого, но столкнулись с ошибкой: "Warning: Use of undefined constant AA_PLUGIN_GUTENBERG
".
Решение проблемы
1. Использование хука init
Ошибки могут возникать, если константа объявляется позже, чем она используется. Для гарантированного объявления константы прежде её использования, рекомендуется применять хук init
, а не plugins_loaded
. Хук init
срабатывает после загрузки WordPress, но до вывода заголовков, что позволяет избежать ошибок с неопределенными константами.
function site_define_constant() {
define('AA_PLUGIN_GUTENBERG', false);
}
add_action('init', 'site_define_constant');
С помощью этого подхода, константа AA_PLUGIN_GUTENBERG
будет объявлена вовремя, и ошибки исчезнут.
2. Обращение к константе в другом плагине
Для доступа к уже определенной константе в файле aa-frontend/folder/somefile.php
, выполните проверку с использованием функции defined()
:
if (defined('AA_PLUGIN_GUTENBERG') && AA_PLUGIN_GUTENBERG) {
// Константа определена и установлена в true
} else {
// Константа либо не определена, либо равна false
}
Альтернативный подход: Использование опций WordPress
Если предполагается изменение значения переменной во время выполнения программы, более устойчивым решением будет использование опций WordPress. Создание и получение значений из таблицы wp_options
позволяет гибко управлять данными между плагинами.
Создание опции
Для установки начального значения переменной, используйте следующую конструкцию:
add_action('init', function() {
if (!get_option('aa_plugin_gutenberg')) {
add_option('aa_plugin_gutenberg', false);
}
});
Получение опции
Чтобы получить значение данной опции в другом плагине, используйте:
if (get_option('aa_plugin_gutenberg')) {
// Опция установлена в true
} else {
// Опция равна false или не установлена
}
Заключение
Данный подход обеспечивает надежность в межплагиновом взаимодействии данных и разрешает проблему неопределенных констант. Использование опций WordPress также позволяет легко изменять и управлять данными плагинов, сохраняя гибкость вашего решения. За счет применения хука init
вы добиваетесь максимальной уверенности в том, что все элементы загружены и готовы к использованию.