Статьи

Получение большинства почтовых форматов: использование почтовых форматов в цикле

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


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

Для сообщений вы используете 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() .

Хотя он использует 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_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, в которых хорошо реализованы форматы записей, чтобы получить вдохновение.