Как правильно включать файлы PHP в плагины
-
-
вы делаете что-то не так,если получаете это сообщение.Убедитесь,что вы включили какие-либо файлы,прежде чем запускать функции из этих файлов.you're doing something wrong if you get that message. Make sure you include any files before you start running functions from these files
- 0
- 2011-01-21
- onetrickpony
-
нет,звонки находятся в файлах,которые я включаю!thats no it, the calls are within the files i'm including!
- 0
- 2011-01-21
- Bainternet
-
лол,теперь я вижу `WP_PLUGIN_URL` в вашем коде выше :)lol, now I see `WP_PLUGIN_URL` in your code above :)
- 0
- 2011-01-21
- onetrickpony
-
Проще говоря,вы можете включать () файлы только через путь к файлу,а не через URI.Put very simply you can only include() files via a filepath and not a URI.
- 3
- 2011-01-21
- editor
-
Эта статья Кодекса (вероятно,написанная после того,как вы задали свой вопрос) весьма полезна: http://codex.wordpress.org/Determining_Plugin_and_Content_DirectoriesThis Codex article (probably written after you asked your question) is quite helpful: http://codex.wordpress.org/Determining_Plugin_and_Content_Directories
- 1
- 2014-03-12
- henrywright
-
Вы делаете это в файле PHP,который используется как конечная точка AJAX,или как обработчик формы?Вы не должны ** никогда ** напрямую обращаться к файлам PHP внутри тем или плагинов WordPress.Также включение URL-адресов не работает,если бы это было,у вас была бы серьезная проблема с безопасностью и ужасная производительность.Are you doing this in a PHP file that's being used as an AJAX endpoint, or a form handler? You should **never** make direct calls to PHP files inside WordPress themes or plugins. Also including URLs doesn't work, if it did you'd have a massive security problem, and terrible performance
- 0
- 2016-05-13
- Tom J Nowell
-
8 ответ
- голосов
-
- 2011-01-21
Во-первых,спасибо всем,кто ответил,
Моя проблема заключалась в вызове включенных файлов с полным URL-адресом таким образом,чтобы они не проходили через WordPress.и это произошло потому,что,как я сказал по вопросу,я звонил им из основного файла плагина.так что исправление закончилось использованием:
include_once('/ipn/paypal-ipn.php');
Я читал о поддержке WordPress а>. и еще раз спасибо за ответ!
First , thank you to everyone who answered,
My problem was calling the included files with full url that way they don't go through WordPress. and that happened because as i stated on the question i was calling them from the main plugin file. so the fix ended up using:
include_once('/ipn/paypal-ipn.php');
i read about at the WordPress support. and again thanks for answering!
-
Не могли бы вы еще раз отметить этот ответ (https://wordpress.stackexchange.com/a/32002/123092) как принятый?Can you please reconsider to mark this answer (https://wordpress.stackexchange.com/a/32002/123092) as accepted one?
- 0
- 2017-09-18
- I am the Most Stupid Person
-
- 2011-10-24
Опаздываю на эту вечеринку,но вот способ "WordPress": используйте
plugin_dir_path( __FILE__ )
,например:<?php include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php'); ?>
Обратите внимание,что функция действительно возвращает конечную косую черту для пути к файлу.
Coming in late to this party, but here's the "WordPress" way: use
plugin_dir_path( __FILE__ )
, e.g.:<?php include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php'); ?>
Note that the function does return the trailing slash for the filepath.
-
Обратите внимание,что при использовании `__FILE__` он будет выводиться относительно текущего файла,из которого вы его вызываете,поэтому,если ваш оператор`include` выполняется из подкаталога внутри файловой структуры вашего плагина,вы также получите подкаталог обратно.Note that by using `__FILE__` it will output relative to the current file you call it from, so if your `include` statement is done from a subdirectory inside your plugin file structure you'll get the subdirectory back too.
- 3
- 2018-01-30
- squarecandy
-
Альтернатива - если вам * НУЖНЫ * относительные пути,это `require_once (plugin_dir_path (__ DIR __). '/Myfile.inc');`The alternative - if you *NEED* relative paths, is `require_once(plugin_dir_path(__DIR__).'/myfile.inc');`
- 2
- 2019-10-04
- FoggyDay
-
- 2011-01-21
Я просмотрел пару плагинов,которые я создал ранее,чтобы увидеть различные способы включения дополнительных файлов в плагины,и заметил,что есть два метода,которые вы можете использовать,возможно,их больше.
Определите каталог ваших плагинов
Внутри вашего плагина есть следующее определение для определения текущего местоположения плагина.
Пример кода:
define( 'PLUGIN_DIR', dirname(__FILE__).'/' );
Просто включите или потребуйте
Вы можете просто использовать;include,include_once,require или require_once внутри папки вашего плагина,указав местоположение,как в приведенном ниже примере кода.Приведенный ниже пример будет основан на файле в корневом каталоге плагина,включая другой файл из папки внутри папки вашего плагина.
Пример кода:
include "classes/plugin-core.php";
I looked through a couple of plugins that I previously created to see the diferent ways that I have included extra files inside of plugins and I noticed there are two methods you can use, there are probably more.
Define your plugin directory
Inside of your plugin have the following definition to define the current plugin location.
Example code:
define( 'PLUGIN_DIR', dirname(__FILE__).'/' );
Just a straight up include or require
You can simply use; include, include_once, require or require_once inside of your plugin folder by referencing the location like in the below example code. The below example will be based on a file in your root plugin directory including another file from within a folder inside of your plugin folder.
Example code:
include "classes/plugin-core.php";
-
относительное включение может принести всевозможные неприятные неожиданные проблемы.relative includes can bring all kinds of nasty unexpected issues.
- 0
- 2017-12-01
- Mark Kaplun
-
- 2011-01-21
Я отказываюсь от конструкций WordPress для включения и использую следующее:
require_once(dirname(__FILE__) . '/filename.php);
Я не думаю,что это действительно решит вашу проблему,которая,похоже,связана с областью действия,но это код,который я использую.
Что касается разницы междуinclude и require:
include выдаст предупреждение ,если файл не найден
require выдаст фатальную ошибку ,если файл не найденinclude_once и require_once не будут включать/требовать файл/код снова,если он уже был включен/обязателен (обратите внимание,что,насколько я могу судить,это только для определенного файла в определенном каталоге).
I end up forgoing the WordPress constructs for includes and use the following:
require_once(dirname(__FILE__) . '/filename.php);
I don't think it will actually solve your issue, which seems to be a scope issue, but it is the code I use.
As for the difference between include and require:
include will throw a warning if the file is not found
require will throw a fatal error if the file is not foundinclude_once and require_once will not include/require the file/code again if it has already been included/required (note that as far as I can tell, this is only for a specific file in a specific directory).
-
- 2011-01-21
<цитата><▪Include
Операторinclude () включает и оценивает указанный файл.
Включить один раз
Операторinclude_once () включает и оценивает указанный файл во время выполнения сценарий. Это поведение похоже на операторinclude () с единственным разница в том,что если код из файл уже был включен,это не будет снова включен. Поскольку название предполагает,он будет включен всего один раз.
< 1xRequire
require () иinclude () идентичны во всех отношениях,за исключением того,как они справиться с ошибкой. Они оба производят Предупреждение,но require () приводит к Фатальная ошибка. Другими словами,не не стесняйтесь использовать require (),если хотите отсутствующий файл,чтобы остановить обработку страницу.
Требовать один раз
Оператор require_once () включает и оценивает указанный файл во время выполнения сценарий. Это поведение похоже на оператор require () с единственным разница в том,что если код из файл уже был включен,это не будут включены снова.
Информация,приведенная выше,взята из документации PHP,дело в том,что нет правильного,будет зависеть от необходимости кода,я действительно require () для важных вещей,таких как функции,но для файлов темы,таких как нижний колонтитул или Я используюinclude_once илиinclude,потому что я могу обработать предупреждение и сказать пользователю/посетителю,что произошла ошибка,а не простоfatal_error
Include
The include() statement includes and evaluates the specified file.
Include Once
The include_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include() statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once.
Require
require() and include() are identical in every way except how they handle failure. They both produce a Warning, but require() results in a Fatal Error. In other words, don’t hesitate to use require() if you want a missing file to halt processing of the page.
Require Once
The require_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the require() statement, with the only difference being that if the code from a file has already been included, it will not be included again.
The info above is from the PHP documentation, the thing is there is not a correct one, will depend on the need of the code, I do require() on important stuff like functions, but on theme files like footer or the loop I use include_once or include because i can handle the warning and say to the user/visitor that happend an error instead of just a fatal_error
-
Как сказал @mtekk,я бы порекомендовал вам использовать эту структуру: require_once (dirname (__ FILE__). '/filename.php);As the @mtekk say I would recomend you to use tis structure: require_once(dirname(__FILE__) . '/filename.php);
- 0
- 2011-01-21
- Webord
-
- 2011-01-21
Привет, @ בניית אתרים:
Когда WordPress загружается,он определяет функцию
add_action()
до ,когда пытается загрузить любые плагины. Тот факт,что вы получаете сообщение об ошибке,говорит мне,что вы делаете что-то странное иличто что-то не так с вашей установкой WordPress.Кому вы загружаете свой "плагин" ?Используете ли вы
include*()
илиrequire*()
для его загрузки,возможно,в вашем файлеwp-config.php
?Hi @בניית אתרים:
When WordPress is loading it defines the
add_action()
function before it attempts to load any plugins The fact you are getting the error tells me you are doing something strange or that something is wrong with your WordPress install.Who are you getting your "plugin" to load? Are you using an
include*()
orrequire*()
to load it, maybe in yourwp-config.php
file? -
- 2016-05-13
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');
Примечание: чтобы поставить в очередь .css & amp;Файлы .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');
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
or
define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) ); include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php');
or
$plugin_dir_path = plugin_dir_path( __FILE__ ); include( $plugin_dir_path . 'ipn/paypal-ipn.php');
Note : to enqueu .css & .js files
admin_enqueue_scripts
inside plugin useplugin_dir_url( __FILE__ )
$plugin_dir_uri = plugin_dir_url( __FILE__ ); wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
-
- 2014-05-29
Каждый раз,когда вы создаете новый файл в своем рабочем каталоге,вы должны каждый раз включать его.Но попробуйте метод сканирования вашей директрой и прикрепления ее автоматически,а не только файловphp,что помогает правильно включать файлыphp,js и css с обеих сторон (серверная часть,интерфейсная часть).
http://kvcodes.com/2014/05/WordPress-тема-разработка-включаемые-файлы-автоматически/
Whenever you create a new file inside your working directory, you have to include it everytime. But try a method to scan your directroy and attach it automatically, not only the php files, Which helps to include php, js and css fiules properly on the both sides( backend, front end).
http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
-
Пожалуйста,добавьте соответствующую информацию из ссылки,предоставленной к вашему ответу.Используйте ссылку в кредитных целях.Пожалуйста [отредактируйте] свой вопросPlease add relevant information from the link provided to your answer. Use the link for credit purposes. Please [edit] your question
- 1
- 2014-05-29
- Pieter Goosen
Моя проблема в том,что я включаю в основной файл плагина файл PHP примерно так:
и в этом файле у меня есть вызов функции WordPress,например:
и я получаю:
<цитата>Неустранимая ошибка: вызов неопределенной функции add_action ()
Теперь,прежде чем вы скажете «используйте
if(**function_exists**('add_action')){
»,если я использую это,тогда это просто не работает.Вопросы:
include
,include_once
,require
и когда использовать witch?