WordPress include свой php

How to include PHP files in plugins the correct way

Now before you say «use if(**function_exists**(‘add_action’))< " if I use that then it just doesn't work.

The questions:

  • What would be the correct way to do that?
  • What are the difference between include , include_once , require and when do I use witch?

you’re doing something wrong if you get that message. Make sure you include any files before you start running functions from these files

This Codex article (probably written after you asked your question) is quite helpful: codex.wordpress.org/Determining_Plugin_and_Content_Directories

9 Answers 9

Coming in late to this party, but here’s the «WordPress» way: use plugin_dir_path( __FILE__ ) , e.g.:

Note that the function does return the trailing slash for the filepath.

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.

The alternative — if you NEED relative paths, is require_once(plugin_dir_path(__DIR__).’/myfile.inc’);

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.

include "classes/plugin-core.php"; 

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 found

include_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).

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

Читайте также:  Пример резюме начинающего программиста java

As the @mtekk say I would recomend you to use tis structure: require_once(dirname(FILE) . ‘/filename.php);

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!

Can you please reconsider to mark this answer (wordpress.stackexchange.com/a/32002/123092) as accepted one?

Источник

Как правильно подключать файлы в WordPress

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

PHP предлагает четыре (!) Способа сделать это, а WordPress даже предлагает свой вариант.

В этой статье мы рассмотрим эти способы, а также рекомендации по использованию каждого из них.

include()

Согласно руководству по PHP: include() будет включать и оценивать указанный файл. Если файл не найден, будет выдано предупреждение PHP.

Проще говоря, это означает, что PHP будет искать файл, который вы пытаетесь включить. Если он найден, он будет добавлен в ваш скрипт в том месте, где вы его объявили.

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

С другой стороны, если вы хотите добавить набор функций или внешний файл в середине существующей функции, вы можете включить его точно в то место, где он вам нужен.

Во-вторых, обратите внимание, что если файл отсутствует, PHP выдаст предупреждение. В зависимости от конфигурации сервера вы можете увидеть это в браузере или в файле записи журнала (или и то, и другое).

Читайте также:  React component css class

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

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

Предположим, что вы работаете над функцией и на полпути к выполнению функции вы собираетесь включить отдельный файл. Этот отдельный файл будет иметь доступ к переменным, определенным ранее в функции, в которую он включен.

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

include_once()

Согласно руководству по PHP: include_once() будет выполнять то же поведение, что и include() , но не будет включать файл снова, если он уже был включен.

Функция include_once() похожа на include() , но между ними есть некоторые ключевые отличия.

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

Так в чем преимущество этого? Помимо гарантии того, что скрипт находится только в одном месте, это также гарантирует, что переменные и функции не обязательно будут переопределены. Напомним, что при использовании include() скрипты имеют доступ к функциям и переменным, которые определены перед ними.

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

require()

Согласно руководству по PHP: require() работает так же, как include() , но выдает фатальную ошибку PHP, если файл не найден.

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

На каком-то уровне может показаться, что требовать файлы — это правильный путь. В конце концов, зачем вам рисковать, включая что-то, чтобы получить предупреждение о потенциальном сбое в приложении.

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

Не существует жестких правил, определяющих, когда использовать require() , а когда include() . Скорее всего тут нужно просто опираться на здравый смысл.

require_once()

Согласно руководству по PHP: require_once() работает так же, как require() , но не будет включать файл во второй раз, если он уже включен.

Читайте также:  Parse datetime string php

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

get_template_part()

WordPress предлагает функцию get_template_part() , которая является частью собственного API и используется специально для повторного использования разделов или шаблонов кода в вашей теме.

get_template_part( 'loop', 'standard' );

Функция принимает два аргумента:

  • Первый аргумент — это ярлык для шаблона. В приведенном примере это будет «loop».
  • Второй аргумент — это имя шаблона. В приведенном выше примере это будет «standard».

С версии WordPress 5.5.0 принимает третий параметр — переменную, которую можно использовать, чтобы пробрасывать данные в шаблон, например:

get_template_part( 'loop', 'standard', [ 'bgcolor' => 'light-gray', 'areas' => [ 1, 2 ] ] );

Теперь в этом файле можно получить указанные параметры через переменную $args.

Когда-что использовать

При использовании этих функций я советую, в первую очередь, опираться на здравый смысл, а во вторую но чьи-то рекомендации, но если вы все же решите воспользоваться советами, то вот принципы, которые я использую чаще всего:

  • При подключении файлов в functions.php чаще всего я использую require_once()
  • При подключении фронтенд-шаблонов в файлах темы использую get_template_part()
  • При разработке плагинов я почти всегда использую include_once() и обычно использую его один раз в функции

beget banner 480x320 skillbox banner 480x320 flexbe banner 480x320

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Похожие посты

Как правильно подключать стили и cкрипты в дочерней теме WordPress?

На эту тему написано уже десятки статей, но тема продолжается обсуждаться, а в чатах и на форумах люди снова и снова задают вопросы и сталкиваются с проблемами. Давайте вместе попробуем на примерах разобраться как же правильно подключать стили и скрипты в WordPress. Начнем по порядку. Есть хук wp_enqueue_scripts, который срабатывает в момент подключения в очередь…

Как изменить robots.txt в мультисайте WordPress

WordPress динамически создает robots.txt. Чтобы перезаписать его при обычной установке без использования нескольких сайтов, вы можете просто загрузить статический файл robots.txt на сервер. При установке системы мультисайтов это приведет к перезаписи файла robots.txt для всех сайтов, что не всегда является нужным результатом. В этой заметке мы обсудим, как можно изменить robots.txt для отдельных сайтов мультисайта….

Как создать AJAX-форму на WordPress без плагинов

WordPress имеет достаточно простую методологию обработки Ajax-запросов. Ajax-запросами называют такие запросы, которые происходят без перезагрузки страницы и в результате работа с сайтом становится быстрее и удобнее для конечного пользователя. Заранее оговорюсь, что в репозитории WordPress существуют десятки нормальных плагинов для работы с формами. С помощью них можно настроить поля, их валидацию, содержимое, интегрировать поддержку Ajax,…

Разработка сайтов для бизнеса

Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.

Источник

Оцените статью