Моя проблема заключается в том, когда в основной файл плагина я включаю файл PHP что-то вроде этого:
include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
и в этом файле у меня есть вызов функции WordPress, как:
add_action('hook', 'callback');
и я получаю:
Неустранимая ошибка: вызов неопределенной функции add_action ()
Теперь, прежде чем сказать «использовать if(**function_exists**('add_action')){
», если я использую это, то это просто не работает.
Вопросы:
- Каков будет правильный способ сделать это?
- Какие различия между
include
,include_once
,require
и когда я могу использовать ведьму?
plugin-development
functions
Bainternet
источник
источник
WP_PLUGIN_URL
в вашем коде выше :)Ответы:
Приходите поздно на эту вечеринку, но вот способ «WordPress»: используйте
plugin_dir_path( __FILE__ )
, например:Обратите внимание , что функция делает вернуть слэш для FilePath.
источник
__FILE__
он будет выводить данные относительно текущего файла, из которого вы его вызываете, поэтому, если вашinclude
оператор сделан из подкаталога в структуре вашего файла плагина, вы также получите подкаталог обратно.require_once(plugin_dir_path(__DIR__).'/myfile.inc');
Я просмотрел пару плагинов, которые я ранее создал, чтобы увидеть различные способы, которыми я включил дополнительные файлы внутри плагинов, и заметил, что есть два метода, которые вы можете использовать, возможно, есть и другие.
Определите ваш каталог плагинов
Внутри вашего плагина есть следующее определение, чтобы определить текущее местоположение плагина.
Пример кода:
Просто прямо включить или требовать
Вы можете просто использовать; include, include_once, require или require_once внутри папки вашего плагина, ссылаясь на расположение, как в приведенном ниже примере кода. Приведенный ниже пример будет основан на файле в корневом каталоге плагинов, включая другой файл из папки внутри папки плагинов.
Пример кода:
источник
В итоге я отказываюсь от конструкций WordPress для включений и использую следующее:
Я не думаю, что это на самом деле решит вашу проблему, которая, кажется, является проблемой области, но это код, который я использую.
Что касается разницы между include и require:
include выдаст предупреждение, если файл не найден,
require выдаст фатальную ошибку, если файл не найден
include_once и require_once больше не будут включать / требовать файл / код, если он уже был включен / обязателен (обратите внимание, что, насколько я могу судить, это только для определенного файла в определенном каталоге).
источник
Во-первых, спасибо всем, кто ответил,
Моя проблема состояла в том, чтобы вызывать включенные файлы с полным URL, чтобы они не проходили через WordPress. и это произошло потому, что, как я сказал по вопросу, я звонил им из основного файла плагина. так что исправление закончилось использованием:
Я читал о поддержке WordPress . и еще раз спасибо за ответ!
источник
Приведенная выше информация взята из документации PHP, дело в том, что она неправильная, будет зависеть от необходимости кода, я требую () для таких важных вещей, как функции, но для файлов тем, таких как нижний колонтитул или цикл, который я использую include_once или include, потому что я могу обработать предупреждение и сказать пользователю / посетителю, что произошла ошибка, а не просто fatal_error
источник
Привет @ בניית אתרים:
Когда WordPress загружается, он определяет
add_action()
функцию, прежде чем пытаться загрузить какие-либо плагины. Тот факт, что вы получаете сообщение об ошибке, говорит мне, что вы делаете что-то странное или что-то не так с вашей установкой WordPress.Кого вы получаете, чтобы ваш «плагин» загружался? Вы используете
include*()
или,require*()
чтобы загрузить его, может быть, в вашемwp-config.php
файле?источник
или же
или же
Примечание: для добавления файлов .css & .js
admin_enqueue_scripts
в плагин используйтеplugin_dir_url( __FILE__ )
источник
Всякий раз, когда вы создаете новый файл в вашем рабочем каталоге, вы должны включать его каждый раз. Но попробуйте метод сканирования вашего directroy и автоматического прикрепления его, а не только файлов php, который помогает правильно включать файлы php, js и css с обеих сторон (бэкэнд, передний конец).
http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
источник