Wordpress подключить файл php
На эту тему написано уже десятки статей, но тема продолжается обсуждаться, а в чатах и на форумах люди снова и снова задают вопросы и сталкиваются с проблемами. Давайте вместе попробуем на примерах разобраться как же правильно подключать стили и скрипты в WordPress.
Начнем по порядку. Есть хук wp_enqueue_scripts , который срабатывает в момент подключения в очередь на вывод файлов стилей и скриптов. Это событие срабатывает в момент хука wp_head с приоритетом 1. Учтите, что для его работы в файле header.php необходима функция wp_head() .
На этот хук wp_enqueue_scripts принято вешать функции, которые подключают стили и скрипты темы с помощью функций wp_enqueue_style() и wp_enqueue_script() соответственно.
Простой способ подключения может выглядеть следующим образом:
Заметьте, что если в функции присутствует префикс get_template_ , то будет подключен файл из родительской темы, если же префикс get_stylesheet_ , то файл будет подключен из дочерней темы только в том случае, если дочерняя тема активирована (если не активирована, файл подключается из родительской).
User Contributed Notes
Using with theme subfolders
To use this function with subfolders in your theme directory, simply prepend the folder name before the slug. For example, if you have a folder called “partials” in your theme directory and a template part called “content-page.php” in that sub-folder, you would use get_template_part() like this:
Passing variables after WordPress 5.5 update
======================================
When calling function
In your template part
the old codex had this entry about “Passing Variables to Template”
Because the template is being required, it will not have access to any variables you define within the calling theme’s PHP code, unless you explicitly declare them as global.
However, load_template(), which is called indirectly by get_template_part() extracts all of the WP_Query query variables, into the scope of the loaded template. So you can use set_query_var() to make your variable available to the template part.
Feedback
Minor suggestion, it should rather be ‘Because of where in the code execution the template is being required’. The fact that is is being required vs being included is not the reason one has to use the WP_Query query variables. — By Jonathan Bossenger — 3 years ago
// Since WP version 5.5, we can set the args directly like the following // Note: array method requires PHP 7.* $args = [ ‘my_var_1’ => $my_var_1, ‘my_var_2’ => $my_var_2, ]; get_template_part( ‘content’, ‘part’, $args ); — By Santukon — 2 years ago
Using loop.php in child themes
Assuming the theme folder is wp-content/themes , that the parent theme is twentyten, and the child theme is twentytenchild, then the following code —
will do a PHP require() for the first file that exists among these, in this priority:
wp-content/themes/twentytenchild/loop-index.php
wp-content/themes/twentyten/loop-index.php
wp-content/themes/twentytenchild/loop.php
wp-content/themes/twentyten/loop.php
Navigation
Adding a navigation bar to theme using a generic nav.php template file:
A simple example of how to use the $args parameter in WordPress 5.5 in your template parts.
In your template part.
Sometime since January 2019, the function has changed to return false if no template file is found. This isn’t noted in the code comments or changelog. The note that the function fails silently is no longer correct.
This now makes it easy for plugins to provide a template fallback (or allow a template override, depending on your perspective) like this:
Feedback
Return value was added in June 2020 in changeset 48209 to fix ticket 40969. — By crstauf — 1 year ago
Since WP 5.5 the $args parameter is used to pass variables through the template.
Get a specific file
Although this kind of defeats the purpose of this function, it’s also possible to load a specific template file with it. All you have to do is use just one argument:
will include layout.php from template-parts subdirectory placed in the root of your theme folder.
Use a boolean in the $args
You can also access the template variables in your template part file by doing this:
Your get_template_part will look something like this:
– Keep in mind that the third argument $args has been added since version 5.5
Feedback
WordPress PHP coding standards do not permit the use of extract() . — By crstauf — 2 years ago
get_template_part(foldername/filename without .php extension)
Create a folder in the theme main directory
Folder name “template-parts” then add two .php files in “template-parts” folder loginuser.php and nonloginuser.php
If user login show loginuser.php file content
If the user do not login show nonloginuser.php file content
Note: Use any folder & files name above I have use random folder name and files name.
If your web server is using ModSecurity, it will likely block attempts to inline SVGs using a PHP method like file_get_contents() . You can use get_template_part() to inline SVGs.
- Create a duplicate of your SVG, where icon.svg becomes inline-icon.svg.php
- Inline them in your template using get_template_part( 'images/inline', 'icon.svg' );
At the time of writing, this works to get around the default OWASP rule set for ModSecurity. Not tested with other rule sets.
Passing variables to get_template_part()
It’s not possible to pass variables to a template loaded via get_template_part(). I came up with a workaround that doesn’t rely on global variables for it to work.
Now, when we try to use $is_featured, it will be available to content.php only.
Feedback
Since WP 5.5 this is no longer needed. Use the $args parameter. — By jabbadu — 2 years ago
WordPress PHP coding standards do not permit the use of extract() — By Iakovos Frountas — 1 year ago
How to passing variables to get_template_part() correctly: Wordpress + 5.5
There are many template files that WordPress uses to display the Post post type. Any content dealing with a blog or its posts are within the Post post type.
Usage
Note: get_template_part() fails silently
require()
Согласно руководству по PHP: require() работает так же, как include() , но выдает фатальную ошибку PHP, если файл не найден.
Файл, подключенный с помощью require() будет выполнять то же действие, что и include() , в части импорта внешнего скрипта в контекст того, над чем вы работаете, но если ему не удается найти файл, он выдаст фатальную ошибка и полностью остановит выполнение.
На каком-то уровне может показаться, что требовать файлы — это правильный путь. В конце концов, зачем вам рисковать, включая что-то, чтобы получить предупреждение о потенциальном сбое в приложении.
Но все зависит от характера того, над чем вы работаете. Иногда можно использовать простые предупреждения PHP — например, забыть инициализировать индекс массива — в других случаях вам нужно точно знать, что файл подключен.
Не существует жестких правил, определяющих, когда использовать require() , а когда include() . Скорее всего тут нужно просто опираться на здравый смысл.
Parameters
( string ) (Required) The slug name for the generic template.
( string ) (Optional) The name of the specialised template.
Default value: null
( array ) (Optional) Additional arguments passed to the template.
Default value: array()
include_once()
Согласно руководству по PHP: include_once() будет выполнять то же поведение, что и include() , но не будет включать файл снова, если он уже был включен.
Функция include_once() похожа на include() , но между ними есть некоторые ключевые отличия.
Во-первых, в то время как include_once() во многом работает так же, как include() , она не позволит вам снова включить скрипт. Это означает, что если где-то еще в вашем проекте уже был включен этот внешний файл, второй раз он подключен не будет.
Так в чем преимущество этого? Помимо гарантии того, что скрипт находится только в одном месте, это также гарантирует, что переменные и функции не обязательно будут переопределены. Напомним, что при использовании include() скрипты имеют доступ к функциям и переменным, которые определены перед ними.
Если вы решите определить новый набор переменных или функций в файле, то вы рискуете переопределить функции и переменные файла, подключенного через include() , которые потенциально могут вызвать серьезные проблемы с выполнением вашего код.
Single.php
It’s good sense to build as simply as possible in your template structure and not make more templates unless you have real need for them. Therefore, most theme developers don’t create a single-post.php file because single.php is specific enough. For the most part, all themes should have a single.php . Below is an example of a single.php file from the theme Twenty Fifteen.
In the code example above you can see the header is pulled in with get_header() then there are a two html tags. Next the Loop starts and the template tag get_template_part( 'content' , get_post_format()); pulls in the appropriate content by determining the post type with get_post_format() . Next, comments are pulled in with the template tag comments_template(). Then there is some pagination. Lastly, the content divs are closed and then footer is pulled in with get_footer() .
Date.php
Similarly, if you are building a theme directed at magazine or news websites, a date.php file might make sense to build as these websites frequently organize their articles and posts by date or issue. Additionally, you could build a day.php , month.php , or year.php if you found enough justification for it.
Home.php
When a static front page is used and the site has a page defined for the blog list the home.php file is used for the designated blog list page. Use of this template is encouraged over creating a custom page template because blog pagination on a custom page template will not work properly. If there is no home.php in the theme index.php will be used instead.
Search.php
Most themes have a search.php file so it is clear to users that their query went through. It is common to have some sort of header identifying the query results such as this snippet found int twenty fifteen’s theme.
This code snippet pulls in the query that was searched with get_search_query() . Often search.php will only pull in the excerpt instead of the full content since the user is trying to determine if the article or page fits their search.
В WordPress одна из распространенных проблемных ситуаций — это правильный способ включения внешних файлов.
PHP предлагает четыре (!) Способа сделать это, а WordPress даже предлагает свой вариант.
В этой статье мы рассмотрим эти способы, а также рекомендации по использованию каждого из них.
Related
Fires before an attempt is made to locate and load a template part.
Fires before the specified template part file is loaded.
Calls the callback functions that have been added to an action hook.
Retrieve the name of the highest priority template file that exists.
Source
Как сделать предварительную регистрацию скриптов
Еще одной важной особенностью работы со скриптами является то, что скрипт можно только зарегистрировать c помощью функции wp_register_script() , а выполнять подключение уже в любом другом месте проекта по необходимым условиям. Рассмотрим на примере:
Сначала мы регистрируем скрипты библиотеки masonry для того, чтобы сделать красивые фото-галереи у нас на сайте. Эти скрипты не будут подключены в html-документ до тех пор, пока вы не используете функцию wp_enqueue_style() или wp_enqueue_script() .
Сами фото-галереи выводятся с помощью шорткодов и мы можем прямо здесь выполнить их подключение. Таким образом эти скрипты будут подключены в html-документе только в том случае, если на странице будет использован этот шорткод.
Provides a simple mechanism for child themes to overload reusable sections of code in the theme.
Includes the named template part for a theme or if a name is specified then a specialised part will be included. If the theme contains no .php file then no template will be included.
The template is included using require, not require_once, so you may include the same template part multiple times.
For the $name parameter, if the file is called "-special.php" then specify "special".
Archive.php
Unless a developer includes meta data with permalinks in their templates, the archive.php will not be used. Meta data is information tied to the post. For example the date something was posted on, the author, and any categories, tags, or taxonomies used for the post are all examples of meta data. When a visitor to a website clicks on the meta data, the archive.php will render any posts associated with that piece of meta data. For example, if a visitor clicks on the name of an author, the archive.php will display all posts by that author.
Commonly, the title of the page being displayed by archive.php will be the name of the meta data the user clicked on. So if the user clicked on the Author’s name, the page name displaying all the other author’s posts will be the Author’s name and frequently there might be an additional description about the meta data. Here is a code example from Twenty Fifteen on their achive.php file. This snippet is the only piece of code that makes the archive.php file different from a home.php or index.php file.
Как сделать обновление скриптов в кеше браузера
Один из часто задаваемых вопросов звучит примерно так: «Почему я изменяю css файл, но эти изменения не видны на сайте?».
Ответ на него достаточно простой: при первом посещении сайта браузер скачивает файлы стилей, скриптов, изображения и т.д. себе в кеш. При каждом последующем посещении браузер уже не будет скачивать их заново, а возьмет из своего локального хранилища (кеша). Это работает в целях оптимизации посещения интернет-ресурсов.
Но есть отличный способ динамически сообщать браузеру об изменениях в ваших файлах — указывать их версии. Это удобно делать с помощью функции filemtime() .
Теперь браузер будет проверять, изменилась ли версия (время последнего изменения) файла и только в случае положительного ответа скачивать файл заново.
К тому же, в одной из последних версий добавили функцию get_theme_file_uri() , которая проверяет наличие файла в дочерней теме перед подключением, это довольно удобно.
Если мы применим эти советы, то получим примерно следующее:
Популярный генератор тем underscores в качестве версии скриптов указывает некую магическую константу _S_VERSION , предварительно определив ее define( '_S_VERSION', '1.0.0' ) . Как вы понимаете, версия не будет меняться динамически при таком подходе и ее указание довольно бессмысленно.
include()
Согласно руководству по PHP: include() будет включать и оценивать указанный файл. Если файл не найден, будет выдано предупреждение PHP.
Проще говоря, это означает, что PHP будет искать файл, который вы пытаетесь включить. Если он найден, он будет добавлен в ваш скрипт в том месте, где вы его объявили.
Это важно понимать. Например, предположим, что вы пишете набор функций, которые зависят от предыдущего набора функций. В этом случае вам нужно убедиться, что сначала включен другой файл.
С другой стороны, если вы хотите добавить набор функций или внешний файл в середине существующей функции, вы можете включить его точно в то место, где он вам нужен.
Во-вторых, обратите внимание, что если файл отсутствует, PHP выдаст предупреждение. В зависимости от конфигурации сервера вы можете увидеть это в браузере или в файле записи журнала (или и то, и другое).
Тем не менее, предупреждения не считаются фатальными и обычно не останавливают выполнение функций, но их важно учитывать, потому что это может означать, что часть вашей работы не загружается и/или не интерпретируется должным образом.
Наконец, обратите внимание, что когда файл загружается с помощью include() , он будет иметь доступ ко всем переменным, ранее определенным в вашем существующем скрипте.
Предположим, что вы работаете над функцией и на полпути к выполнению функции вы собираетесь включить отдельный файл. Этот отдельный файл будет иметь доступ к переменным, определенным ранее в функции, в которую он включен.
Хотя вы можете рассматривать это как удобство, это делает внешний сценарий немного неясным, поскольку он не обязательно показывает, что зависит от переменных, определенных извне. Это может сбивать с толку, особенно при работе в команде.
Похожие посты
- 16 августа, 2021
- 5-6 мин.
- 453
Category.php, Tag.php, and Taxonomy.php
If you need a refresher on what categories, tags, & taxonomies are you can look at their page. Often you won’t need to build out these template files. However, in an example of building a theme for food bloggers, there are some use cases for building these specific templates. In a food blogger website, the categories could be Great Restaurants, Beautiful Food, Ethnic Cuisine, and Recipes.
You might want most of your blog posts to display the same way except for any blogs that are categorized as recipes, because all recipes have ingredients and instrucitons sections. Therefore, you may want to build a category-recipe.php file to display your recipe blog posts in a grid view with some of the important details about the recipe visible.
Additionally, perhaps chocolate is a really important tag for the theme you’re building. It might make sense to build a tag-chocolate.php file so that you can display a specialized banner image of chocolate.
Условные теги WordPress
Условные теги — это функции, которые позволяют определить что-либо и дать однозначный ответ (логическое true или false ). «Условные» потому что практически всегда используются внутри условия if .
К примеру, функция is_single() позволяет определить, находимся ли мы, просматривая сайт в данный момент, на странице поста.
Полный список условных тегов WordPress и их документацию вы найдёте здесь.
На некоторых схемах ниже, для того, чтобы обозначить, для какого типа страницы используются определенные файлы, я как раз таки задействовал условные теги.
Changelog
Version | Description |
---|---|
5.5.0 | The $args parameter was added. |
3.0.0 | Introduced. |
Структура файлов (схема подключения)
Кликните по картинке, чтобы открыть в полном размере.
На графике показан порядок, по которому WordPress запрашивает файлы. Есть и альтернативные варианты этой схемы, чуть более старые или урезанные, но рабочие, вот первый, а вот второй.
А теперь разберемся, что означает каждая переменная (на графике — со знаком $).
$custom Название файла шаблона страниц — про них всё подробно расписано здесь.
Index.php
index.php will display Post post types if there is no other template file in place. As stated in many places, every theme must have an index.php file to be valid. Many basic themes can get away with just using the index.php to display their Post post types, but the use cases given above would justify creating other template files.
Often you will want unique content structure or layout depending on what is being displayed. There are many templates you can use to customize content structure based on the context within the site. The two most notable post template files are home.php and single.php which display a feed of posts and a single post respectively.
Как создать AJAX-форму на WordPress без плагинов
WordPress имеет достаточно простую методологию обработки Ajax-запросов. Ajax-запросами называют такие запросы, которые происходят без перезагрузки страницы и в результате работа с сайтом становится быстрее и удобнее для конечного пользователя. Заранее оговорюсь, что в репозитории WordPress существуют десятки нормальных плагинов для работы с формами. С помощью них можно настроить поля, их валидацию, содержимое, интегрировать поддержку Ajax,…
Разработка сайтов для бизнеса
Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.
Редактировали какие-нибудь готовые темы для WordPress? Наверное заметили, что в каждой своя структура файлов.
Например в одной из них за вывод рубрик отвечает category.php , а в другой это archive.php , в третьей вообще отсутствуют оба. Почему так?
Это потому, что существует порядок, следуя которому WordPress, в зависимости от текущей страницы сайта, ищет соответствующие файлы в директории темы и, если они существуют — подключает.
Этот урок должен раз и навсегда ответить на вопрос — какой из PHP-файлов темы используется для отображения той или иной страницы сайта?
Как правильно подключать стили и cкрипты в дочерней теме WordPress?
На эту тему написано уже десятки статей, но тема продолжается обсуждаться, а в чатах и на форумах люди снова и снова задают вопросы и сталкиваются с проблемами. Давайте вместе попробуем на примерах разобраться как же правильно подключать стили и скрипты в WordPress. Начнем по порядку. Есть хук wp_enqueue_scripts, который срабатывает в момент подключения в очередь…
More Information
require_once()
Согласно руководству по PHP: require_once() работает так же, как require() , но не будет включать файл во второй раз, если он уже включен.
Это, вероятно, легче всего понять, поскольку мы рассмотрели последние три функции относительно подробно. Проще говоря, require_once() выполняет те же функции, что и require() , но не будет пытаться снова включить файл, если он уже загружен в ваш скрипт.
Пример для рубрик
Сразу же приведу пример для страницы с рубрикой с >54 и ярлыком myphotos :
- category-myphotos.php в первую очередь WordPress ищет этот файл в папке с темой, если его не существует, то файл со следующего пункта списка,
- category-54.php если и этого файла нет в директории темы, то переходим к следующему пункту и так далее,
- category.php ,
- archive.php ,
- index.php ;
Author.php
If you are building a theme designed for multiple authors, it might make sense to build an author.php template. In the author.php template you could provide more information about an author, their gravatar, pull in their social media sites, and then all posts written by them. This would be a step up from relying just on the archive.php file.
Additionally, you can build specific author.php files for individual author’s by using their author ID or nicename. For example, say John Doe is the head author for a site with many guest authors. You may want all the guest authors’ information to display with author.php but you might build a specific author page with more information for John Doe by creating author-johndoe.php or author-3.php if his author ID is 3.
Что в видеоуроке?
В этом уроке мы с вами приступим к натяжке других шаблонов вёрстки на нашу тему WordPress.
Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.
«Статическая» страница блога:
Типо тоже обычная страница, но не совсем – потому что содержит форму:
get_template_part()
WordPress предлагает функцию get_template_part() , которая является частью собственного API и используется специально для повторного использования разделов или шаблонов кода в вашей теме.
Функция принимает два аргумента:
- Первый аргумент — это ярлык для шаблона. В приведенном примере это будет «loop».
- Второй аргумент — это имя шаблона. В приведенном выше примере это будет «standard».
С версии WordPress 5.5.0 принимает третий параметр — переменную, которую можно использовать, чтобы пробрасывать данные в шаблон, например:
Теперь в этом файле можно получить указанные параметры через переменную $args.
Когда-что использовать
При использовании этих функций я советую, в первую очередь, опираться на здравый смысл, а во вторую но чьи-то рекомендации, но если вы все же решите воспользоваться советами, то вот принципы, которые я использую чаще всего:
- При подключении файлов в functions.php чаще всего я использую require_once()
- При подключении фронтенд-шаблонов в файлах темы использую get_template_part()
- При разработке плагинов я почти всегда использую include_once() и обычно использую его один раз в функции
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 5 / 5. Количество оценок: 1
Оценок пока нет. Поставьте оценку первым.
Как сделать подключение скриптов по условию
При подключении скриптов и стилей на хуке wp_enqueue_scripts глобальные переменные уже определены, поэтому все условные теги вида is_home() , is_front_page() , is_archive() , is_page() и подобные будут работать. В примере ниже мы подключаем на главную одну таблицу стилей, а на страницу категорий другую. Общий файл стилей будет подключен на все страницы сайта.
Как изменить robots.txt в мультисайте WordPress
WordPress динамически создает robots.txt. Чтобы перезаписать его при обычной установке без использования нескольких сайтов, вы можете просто загрузить статический файл robots.txt на сервер. При установке системы мультисайтов это приведет к перезаписи файла robots.txt для всех сайтов, что не всегда является нужным результатом. В этой заметке мы обсудим, как можно изменить robots.txt для отдельных сайтов мультисайта….
Шаблон главной страницы WordPress
В чем отличие между index.php , home.php и front-page.php ?
Уверен, что этот вопрос терзает многих, как когда-то терзал меня, особенно, если вы начали своё обучение WordPress не с теории, а с практики (я имею ввиду разбор и доработка уже готовых тем). Дело в том, что в таких темах может присутствовать либо home.php , либо front-page.php , либо вообще ни того и ни другого файла, index.php же присутствует всегда.
Разберем сам порядок. Сначала на схеме:
Комментирую — итак, когда мы находимся на главной странице, в первую очередь WordPress пытается подключить файл front-page.php , если же файла не существует, вторым шагом он проверяет, что указано в настройках Настройки > Чтение, короче говоря:
Singular.php
WordPress Version 4.3 added singular.php that comes in the hierarchy after single.php for posts, page.php for pages, and the variations of each. This template follows the rules of is_singular() and is used for a single post, regardless of post type. Themes that used the same code for both of those files (or included one in the other) can now simplify down to the one template.
Добавить комментарий Отменить ответ
Author.php and Date.php
Author.php and date.php are more specific archive type files. If you need a refresher check out where they fit within the template heirarchy. Generally, archive.php will suffice for most themes’ needs and you won’t need to create these templates.
Return
(void|false) Void on success, false if the template does not exist.
Как добавить один скрипт после другого
Еще, при работе со скриптами полезно знать, что в третьем параметре функции wp_enqueue_script() можно указать зависимость этого скрипта от других. Например, если вы укажите array('jquery') , то скрипт example.min.js будет подключен после скрипта jquery.min.js.
Кроме того, существует полезная функция wp_add_inline_script() , которая позволит вам добавить скрипт прямо в html документ, после указанного. Аналогично для стилей будет работать функция wp_add_inline_style() . Рассмотрим пример подключения slick-слайдера:
Как видите, сначала нужные файлы подключаются с помощью функций wp_enqueue_style() и wp_enqueue_script() , после чего скрипт инициализации слайдера вставляется с помощью wp_add_inline_script() после основного slick.min.js.
Читайте также: