Плагин WordPress: как разрешить «Вызов неопределенной функции add_action (), а также add_action ()»?

Fatal error: Call to undefined function add_action() in D:\xampp\htdocs\excel\wp-content\plugins\DatabaseToExcel\download.php on line 13 

Я создаю плагин для экспорта таблицы базы данных в Excel. В основном у меня есть два файла в моем плагине, я отправляю почтовый запрос в файл download.php с именем таблицы, которое будет экспортировано. Я хочу быть уверенным в файле download.php, который зарегистрирован администратором, но когда я вызываю любую из функций WordPress Core, возникает фатальная ошибка. Я включаю wp-load.php и другие файлы, подобные этому –

 require_once('../../../wp-load.php'); require_once('../../../wp-config.php'); require_once('../../../wp-includes/load.php'); 

В этом случае функции, такие как auth_redirect (), работают нормально, без ошибок. Но я хочу загрузить этот плагин на www.wordpress.org.

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

Вот ответ от wordpress.org-

В download.php, который STILL не защищен способом

 require_once('../../../wp-load.php'); require_once('../../../wp-config.php'); require_once('../../../wp-includes/load.php'); 

В том числе wp-config.php, wp-blog-header.php, wp-load.php или почти любой другой основной файл WordPress, который вы должны вызывать напрямую через include, не является хорошей идеей, и мы не можем одобрить плагин, который делает это, если у него нет веских оснований для загрузки файла (ов). Он подвержен сбою, поскольку не все установки WordPress имеют одинаковую структуру файлов.

Обычно плагины будут включать wp-config.php или wp-load.php, чтобы получить доступ к основным функциям WordPress, но есть намного лучшие способы сделать это. Лучше всего, если вы привязываете свои функции обработки (те, которые нуждаются, но не имеют доступа к основным функциям) в действие, например, «init» или «admin_init».

Для получения дополнительной информации обратитесь к справочнику API плагинов: http://codex.wordpress.org/Plugin_API

Для других возможностей или для лучшего понимания, почему мы это не разрешаем, прочтите следующее: http://ottopress.com/2010/dont-include-wp-load-please/

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

Это мой самый первый плагин WordPress, и после многих часов борьбы и чтения всех этих вопросов у меня нет решения.

Включите файл download.php после загрузки файлов WP. Вот пример кода для размещения в главном файле вашего плагина (или загрузчика):

 add_action('wp_loaded', 'pluginPrefix_include_download_script'); function pluginPrefix_include_download_script() { require('download.php'); } 

Вы также можете использовать другие действия, такие как admin_init если вам нужно, чтобы этот файл загружался ранее. Вы также можете указать путь к файлу с помощью plugin_dir_path(__FILE__) это вернет путь к вашему каталогу плагина, и вы можете использовать его следующим образом:

 function pluginPrefix_include_download_script() { $pluginDirPath = plugin_dir_path(__FILE__); require($pluginDirPath.'download.php'); } 

это может стать полезным, если ваш файл download.php находится во вложенной папке (например, inc /). В этом случае ваша функция включения может выглядеть так:

require($pluginDirPath.'inc/download.php')