Intereting Posts
WordPress while loop с афабриком, считая один, два, три Может ли разработчик принять плагин с надписью «не обновляется более чем за 2 года»? Проблемы с установкой WordPress Получить PHP Не работает Ответ Подсчет просмотров страниц на сайтах с высокой пропускной способностью Проверьте, находится ли поле внутри массива в веточке PHP-строка перевода Запрос WP для получения массива слизней Родительская страница и URL-адрес Breadcrumb для пользовательских типов сообщений не работают Должность CPT не показывает теги и категории на странице администрирования бэкэнд WP Admin Panel для установки нескольких сайтов не загружает JavaScript для одного субдомена Как вы наварите удалить категорию из сообщений? crontab wp-cron.php для многосайтовой сети на основе маршрута: по одному для каждого пути? Или только один для корня? Сериализация данных для опций wp Запретить вкладчику показывать список комментариев Конкатенация пользовательского значения поля и значения HTML

Как правильно включить файлы PHP в плагинах

Моя проблема в том, когда в основном файле плагина я включаю 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 ()

Теперь, прежде чем вы скажете «use if(**function_exists**('add_action')){ « если я использую это, то это просто не работает.

Вопросы:

  • Каким будет правильный способ сделать это?
  • В чем разница между include , include_once , require и когда я использую ведьму?

Приходите в конце этой вечеринки, но вот путь «WordPress»: используйте plugin_dir_path( __FILE__ ) , например:

 <?php include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php'); ?> 

Обратите внимание, что функция возвращает возвращаемую косую черту для пути к файлу.

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

Определите свой каталог плагинов

Внутри вашего плагина есть следующее определение для определения текущего местоположения плагина.

Пример кода:

 define( 'PLUGIN_DIR', dirname(__FILE__).'/' ); 

Просто прямо включите или потребуйте

Вы можете просто использовать; include, include_once, require или require_once внутри вашей папки плагина, ссылаясь на местоположение, как в приведенном ниже примере кода. Нижеприведенный пример будет основан на файле в вашем корневом каталоге плагинов, включая другой файл из папки внутри вашей папки плагина.

Пример кода:

 include "classes/plugin-core.php"; 

Я в конечном итоге отказался от конструкций WordPress для включения и использовал следующее:

 require_once(dirname(__FILE__) . '/filename.php); 

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

Что касается разницы между include и require:
include будет вызывать предупреждение, если файл не найден
require будет вызывать фатальную ошибку, если файл не найден

include_once и require_once не будут включать / требовать файл / код еще раз, если он уже был включен / требуется (обратите внимание, что, насколько я могу судить, это только для определенного файла в определенном каталоге).

Во-первых, спасибо всем, кто ответил,

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

 include_once('/ipn/paypal-ipn.php'); 

я читаю о поддержке WordPress . и снова спасибо за ответ!

Включают

Оператор include () включает и оценивает указанный файл.

Включить один раз

Оператор include_once () включает и оценивает указанный файл во время выполнения скрипта. Это поведение похоже на оператор include (), с той лишь разницей, что если код из файла уже включен, он больше не будет включен. Как следует из названия, он будет включен только один раз.

требовать

require () и include () идентичны во всех отношениях, кроме как они обрабатывают сбой. Они оба генерируют предупреждение, но require () приводит к фатальной ошибке. Другими словами, не стесняйтесь использовать require (), если вы хотите, чтобы отсутствующий файл остановил обработку страницы.

Требовать один раз

Оператор require_once () включает и оценивает указанный файл во время выполнения скрипта. Это поведение похоже на инструкцию require (), с той лишь разницей, что если код из файла уже включен, он больше не будет включен.

Информация выше из документации по PHP, дело в том, что она неправильная, будет зависеть от потребности в коде, я требую () для важных вещей, таких как функции, но в файлах тем, таких как footer или loop, которые я использую include_once или include, потому что я могу обработать предупреждение и сказать пользователю / посетителю, что произошла ошибка, а не просто fatal_error

Привет @ בניית אתרים:

Когда WordPress загружается, он определяет функцию add_action() прежде чем пытается загрузить любые плагины. Тот факт, что вы получаете ошибку, говорит мне, что вы делаете что-то странное или что-то не так с вашей установкой WordPress.

Кто вы загружаете свой «плагин» ? Используете ли вы include*() или require*() для его загрузки, возможно, в вашем файле wp-config.php ?

Всякий раз, когда вы создаете новый файл внутри своего рабочего каталога, вы должны включать его каждый раз. Но попробуйте метод сканирования вашего directroy и присоедините его автоматически, а не только файлы php, которые помогают правильно включить php, js и css-филы на обеих сторонах (бэкэнд, передняя часть).

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/

 include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php'); 

или

 define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) ); include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php'); 

или

 $plugin_dir_path = plugin_dir_path( __FILE__ ); include( $plugin_dir_path . 'ipn/paypal-ipn.php'); 

Примечание: для enqueu .css & .js файлов admin_enqueue_scripts внутри плагина используйте plugin_dir_url( __FILE__ )

 $plugin_dir_uri = plugin_dir_url( __FILE__ ); wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');