В первой части этой серии я обсудил, что такое форматы постов и почему вы должны их использовать. Теперь пришло время узнать, как использовать форматы сообщений для управления основным циклом в вашей теме, чтобы правильно отображать каждый тип сообщений.
Включение почтовых форматов
Прежде чем вы сможете использовать форматы сообщений в теме, вы должны зарегистрировать их поддержку. Каждый тип сообщения, встроенный (то есть сообщения и страницы) или пользовательские типы сообщений должны иметь поддержку для типов сообщений, зарегистрированных отдельно.
Для сообщений вы используете function add_theme_support()
как часть настройки вашей темы в functions.php
, например:
1
2
3
4
5
6
7
8
|
add_action( ‘after_setup_theme’, ‘slug_post_formats’ );
function slug_post_formats() {
add_theme_support(
‘post-formats’, array(
‘aside’, ‘image’, ‘video’, ‘audio’, ‘quote’, ‘link’, ‘gallery’,
)
);
}
|
Для других типов сообщений, включая страницы и пользовательские типы сообщений, вы должны использовать add post_type_support()
. Если вы хотите, чтобы страницы поддерживали те же форматы постов, что и посты, вы просто сказали бы WordPress, что хотите, чтобы они выглядели так:
1
|
add_post_type_support( ‘page’, ‘post-formats’ );
|
Вы можете использовать подобный код, чтобы добавить поддержку для пользовательских типов записей, или добавить «post-format» к аргументу «Support» в register_post_type()
при создании типа записи.
Разные форматы постов для разных типов постов
В предыдущем разделе код, который я показал, вы добавили поддержку другим типам постов тех же форматов постов, которые были включены для постов. Если вы хотите, чтобы ваш пользовательский тип поста поддерживал разные форматы постов, это также возможно с помощью add_post_type_support()
, просто передав ему массив форматов постов.
Например, чтобы добавить поддержку галерей и изображений на страницы, при добавлении видео к пользовательскому типу публикации, называемому «товары», и ко всем форматам публикации к публикациям, вы должны сделать это:
01
02
03
04
05
06
07
08
09
10
|
add_action( ‘after_setup_theme’, ‘slug_post_formats’ );
function slug_post_formats() {
add_theme_support(
‘post-formats’, array(
‘aside’, ‘image’, ‘video’, ‘audio’, ‘quote’, ‘link’, ‘gallery’,
)
);
add_post_type_support( ‘pages’, ‘post-formats’, array( ‘gallery’, ‘image’ ) );
add_post_type_support( ‘products’, ‘post-formats’, array( ‘video’ ) );
}
|
Использование почтовых форматов в цикле
Теперь, когда ваша тема поддерживает форматы сообщений, пришло время узнать, как их использовать.
Представляем get_template_part ()
Что делает форматы постов крутыми, так это то, что у нас может быть один основной цикл с разной разметкой для каждого формата поста в отдельных файлах. Эта функциональность благодаря двум функциям, первая из которых вы должны ознакомиться с get_template_part()
.
Хотя он использует require()
, если вы проследите достаточно далеко в исходном коде, get_template_part()
дает нам более гибкий и более щадящий способ включать файлы шаблонов в другие шаблоны, которые мы не получаем с помощью require()
. Я говорю прощение, потому что, в отличие от require()
, get_template_part()
может работать с несуществующими путями к файлам.
Например, get_template_part( 'content', 'foo' );
попытается загрузить файл content-foo.php
, но если он не существует, вместо этого попытается загрузить content.php
. Напротив, require( 'content-foo.php' );
вернет ошибку, если content-foo.php
не существует, существует ли content.php
или нет.
Имейте в виду, что get_template_part()
специально для этого конкретного get_template_part()
так как загружает файлы относительно корня текущей темы. В результате вам не нужно использовать get_template_directory_uri()
или любые подобные функции для указания пути. Вы по-прежнему можете использовать его для загрузки файлов в подкаталогах основного каталога темы, указав путь относительно корня темы в первом аргументе. Например, чтобы загрузить content-main.php
из подкаталога с именем ‘parts’, вы должны использовать get_template_part( 'parts/content', 'main' );
,
Представляем get_post_format ()
Вторая функция, которая делает все это возможным, — это get_post_format()
, которая возвращает формат записи для текущей записи в цикле. Хотя он имеет много применений, основное использование этих функций является аргументом для get_template_part()
. Это то, что позволяет нам включать части контента, специфичные для формата публикации, как мы увидим в следующем разделе.
Из-за гибкости get_post_format()
обсуждаемой в последнем разделе, мы можем использовать get_post_format()
качестве одного из аргументов, даже если в теме нет части содержимого для всех используемых форматов записей.
Включение частей шаблона в цикл
Теперь, когда вы понимаете две функции, которые делают возможными отдельные части контента после форматирования, давайте все вместе.
Взгляните на основной цикл из Twenty Fourteen:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
get_template_part( ‘content’, get_post_format() );
endwhile;
twentyfourteen_paging_nav();
else :
get_template_part( ‘content’, ‘none’ );
endif;
?>
|
Как видите, это очень простой цикл. Фактическая разметка для постов содержится в отдельных частях контента. Из-за всепрощающей природы get_template_part()
если контентная часть для определенного формата публикации не существует, WordPress вернется к content.php
. Это означает, что если текущая запись имеет формат ‘video’, WordPress сначала попытается загрузить content-video.php
, а если он не найден, то будет выполнен возврат к content.php
.
Дочерние темы и части контента
Как я уже говорил ранее, get_template_part()
относится к дочерней теме. Это означает, что WordPress сначала будет искать файл в папке дочерней темы перед родительской темой, если дочерняя тема используется.
В результате рекомендуется использовать get_template_part( 'content', get_post_format() );
включить основной цикл в вашу страницу, даже если ваша тема не поддерживает форматы сообщений. Таким образом, дочерняя тема может объявлять о поддержке формата записей и добавлять свои собственные части контента для форматов записей, которые она поддерживает.
Идти дальше и форматировать сообщения
Теперь, когда вы знаете, как добавить поддержку вашей темы для форматов сообщений и настроить различные части шаблона на основе формата сообщений, пришло время подумать о том, как использовать их в вашей теме. Я расскажу, как это сделать, в оставшейся части этой серии. Обязательно ознакомьтесь с кодом тем, например Twenty Fourteen, в которых хорошо реализованы форматы записей, чтобы получить вдохновение.