Как правильно включить файлы 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 и когда я использую witch?
46 голосов | спросил Bainternet 21 Jam1000000amFri, 21 Jan 2011 04:48:41 +030011 2011, 04:48:41

8 ответов


4

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

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

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

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

ответил Bainternet 21 Jam1000000amFri, 21 Jan 2011 07:00:37 +030011 2011, 07:00:37
63

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

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

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

ответил Chip Bennett 25 +04002011-10-25T02:19:04+04:00312011bEurope/MoscowTue, 25 Oct 2011 02:19:04 +0400 2011, 02:19:04
6

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

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

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

Пример кода:

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

Только прямая ссылка включает или требует

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

Пример кода:

include "classes/plugin-core.php";
ответил Dwayne Charrington 21 Jpm1000000pmFri, 21 Jan 2011 13:40:55 +030011 2011, 13:40:55
5

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

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

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

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

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

ответил mtekk 21 Jam1000000amFri, 21 Jan 2011 06:29:35 +030011 2011, 06:29:35
3
  

Включить

     

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

     

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

     

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

     

Требовать

     

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

     

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

     

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

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

ответил Webord 21 Jam1000000amFri, 21 Jan 2011 06:34:04 +030011 2011, 06:34:04
1

Привет @ × '× × × × × × × × × × × × × × × ×:

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

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

ответил MikeSchinkel 21 Jam1000000amFri, 21 Jan 2011 06:46:32 +030011 2011, 06:46:32
0

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

http://kvcodes.com/2014/05 /WordPress-тема-разработка-включаемые файлы, автоматически /

ответил varadha 29 Mayam14 2014, 08:56:52
0
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');
ответил Aamer Shahzad 13 Maypm16 2016, 19:35:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132