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

Загальні селектори
Тільки точні збіги
Шукати у заголовках
Шукати у контенті
Вибір типів постів
Фільтрувати за категоріями
FAQ
Hostenko
Натхнення
Відео уроки
Новини
Плагіни
теми
Уроки
Хакі

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

Дивіться також:

Увімкнення форматів записів

Перш ніж використовувати формати записів у темі, вам потрібно зареєструвати їхню підтримку. Кожен тип запису, вбудований (це пости та сторінки) або користувальницький, повинен мати окремо зареєстровану підтримку.

inet.ws - Powerful VPS Hosting в США, Canada, UK та 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'до аргументу'опори' в register_post_type() під час створення типу записів.

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

У попередній частині код, який я показав, додавав підтримку до інших типів записів тих самих форматів, що були включені для постів. Якщо ви хочете, щоб ваш тип запису підтримував інші формати записів, це теж можна зробити, використовуючи функцію add_post_type_support() - Треба просто передати в неї масив форматів записів.

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

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

І хоча вона використовує вимагати (), якщо ви заглибитеся у вихідний код, get_template_part() дає нам більш гнучкі способи включати файли шаблонів до інших шаблонів, яких не дає вимагати (). Я говорю гнучкі, оскільки на відміну від вимагати (), 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 з підпапки 'частини' Ви можете використовувати get_template_part( 'parts/content', 'main' );

представляємо get_post_format()

Друга функція, яка робить все це можливим, це get_post_format(), яка повертає формат запису для поточного запису у циклі. Вона має багато способів використання, але основне її призначення - аргумент для get_template_part(). Це те, що дозволяє нам включати частини контенту, які стосуються конкретних типів записів, як ми побачимо далі.

Завдяки цій гнучкості get_post_format() ми можемо використовувати цю функцію як один з аргументів, навіть якщо у нас немає контентної частини теми для кожного з форматів записів, що використовуються.

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

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

Подивіться на основний цикл теми Двадцять чотирнадцять:

<?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.

Це означає, що якщо у поточного запису формат 'відео', 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 в США, Canada, UK та DE!
Олексій Шевченко
редактор wpcafe
Вивчає сайтобудування з 2008 року. Практикуючий вебмайстер, який спеціалізується на створенні сайтів на WordPress. Задати питання Олексію можна на https://profiles.wordpress.org/wpthemeus/

Коментарі до запису: 11

Збір:

Окрім першого прикладу взагалі нічого незрозуміло. Тарабарщина.

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
Тут англійською, але начебто доступно.

Додати коментар або відгук