Больше результатов...

Generic selectors
Только точные совпадения
Искать в заголовках
Искать в контенте
Post Type Selectors
Filter by Categories
FAQ
Hostenko
Вдохновение
Видеоуроки
Новости
Плагины
Темы
Уроки
Хаки

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

Смотрите также:

Включение форматов записей

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

inet.ws - Powerful VPS Hosting in the USA, Canada, UK and DE!

Для постов вы используете функцию add_theme_support() (это часть вашей темы), в файле functions.php это выглядит так:

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(). Если вы хотите, чтобы страницы поддерживали те же форматы записей, что и посты, вам нужно просто использовать такой код:

add_post_type_support( 'page', 'post-formats' );

Вы можете использовать подобный код для добавления поддержки собственных типов записей или добавить 'post-formats' к аргументу 'supports' в register_post_type() при создании типа записей.

Разные форматы для разных типов записей

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

Например, чтобы добавить поддержку галерей и изображений в страницы, при добавлении собственного типа записи под названием 'products' и всех форматов, вы сделаете следующее:

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_directory_uri() или другие подобные функции для указания точного пути.

При этом вы можете использовать ее для загрузки файлов в подпапки основной папки темы, указывая путь, относительный к корню темы в первом аргументе. Например, чтобы загрузить content-main.php из подпапки 'parts' вы можете использовать get_template_part( 'parts/content', 'main' );

Представляем get_post_format()

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

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

Включаем части шаблонов в цикл

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

Посмотрите на основной цикл темы Twenty Fourteen:

<?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, где уже внедрены форматы записей. Это даст вам вдохновение.

Источник: code.tutsplus.com
inet.ws - Powerful VPS Hosting in the USA, Canada, UK and DE!
Алексей Шевченко
редактор wpcafe
Изучает сайтостроение с 2008 года. Практикующий вебмастер, специализирующийся на создании сайтов на WordPress. Задать вопрос Алексею можно на https://profiles.wordpress.org/wpthemeus/

Комментарии к записи: 11

Gathering:

Кроме первого примера, вообще ничего непонятно. Тарабарщина.

WPcafe.org:

Значит вам, скорее всего, не обязательно пользоваться форматами постов)

nikitager:

Подскажите пожалуйста, каким плагином создать такую же красивую форму подписки после статьи, как у вас?

WPcafe.org:

Mailchimp

Александр:

Как переименовать стандартные названия форматов, например изображение переименовать в фотографию?

WPcafe.org:

Эти понятия должны храниться в файлах локализации WordPress

Александр:

понятно. при обновлении wordpress новые названия вернуться к старым, или можно файл локализации вынести отдельно?
И еще, где можно более подробно почитать про то как изменить файл отвечающий за тип поста, а то что то у меня не происходит изменений при редактировании кода в том же content-image.php

WPcafe.org:

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

Ваня:

«Разные форматы для разных типов записей» — выводит весь список форматов, которые добавляли через «add_theme_support», как решить?

Роман:

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

WPcafe:

https://wordpress.stackexchange.com/questions/262005/add-the-html-extension-to-custom-post-types
тут на английском, но вроде доступно.

Добавить комментарий