Що ви будете створювати
В попередній статті я показала, як створити архів таксономії, в якому перераховані записи по термінам таксономії.
Тема цієї статті трохи схожа на неї, тому що тут я покажу, як відібрати повідомлення з архівів, але ми будемо використовувати іншу структуру і інший файл шаблону. Я розповім, як створити шаблон архіву для таксономії, в якому повідомлення будуть виводити за типом запису:
Це може стати в нагоді вам, якщо ви реєструєте тип записів, які потрібно зберігати окремо від звичайних постів або від записів інших типів, однак маєте одну і ту ж таксономію, яка застосовується до обох типів.
Наприклад, якщо ви створюєте списки книг і статей, як списки записів різних типів, і в якості таксономії до них застосовуються одні і ті ж теми (наприклад, WordPress!)
У моєму прикладі я буду працювати з типом записів ‘animals’, який я створила в попередній статті, але тепер я буду працювати і з звичайними записами. Спочатку я поставлю список тварин з терміном для запиту, а потім виведу в блозі список записів з цим терміном.
1. Приступаємо до роботи: Створення теми
Я створю тему, яка буде дочірньої для теми twentyfourteen, так що якщо ви використовуєте вихідні файли для цього уроку, вам також необхідно встановити на вашому сайті цю тему. У стилі моєї теми я додаю наступне:
/*
Назва теми: WPTutsPlus Creating a Taxonomy Archive to List Posts by Post Type
URI-адреса теми: http://rachelmccollin.co.uk/wptutsplus-tax-archive-by-post-type/
Опис: Тема для створення користувальницького архіву таксономії. Дочірня для теми Twenty Fourteen.
Автор: Рейчел МакКоллин
Author URI: http://rachelmccollin.co.uk/
Шаблон: twentyfourteen
Версія: 1.0
*/
@import url(«../twentyfourteen/style.css»);
Все це потрібно додати, щоб створити дочірню тему. Якщо ви використовуєте власну тему, можете пропустити цей пункт.
2. Реєструємо тип запису і таксономію
Примітка: Якщо ви читали інші мої статті щодо створення шаблону архіву записів типу, ви можете використовувати тему, створену в них, так як там використовуються ті ж типи записів і таксономія. Вам просто потрібно зробити одну хитрість, про яку я розповім в цьому розділі, а також додати новий шаблон для архіву таксономії.
Наступним етапом буде реєстрація типу запису ‘animal’ і таксономії ‘animal family’. Створіть файл functions.php для вашої теми і в першу чергу додайте функцію для реєстрації записів:
// реєстрація користувальницького типу записів під назвою ‘animals’
function wptp_create_post_type() {
$labels = array(
‘name’ => __( ‘Animals’ ),
‘singular_name’ => __( ‘animal’ ),
‘add_new’ => __( ‘New animal’ ),
‘add_new_item’ => __( ‘Add New animal’ ),
‘edit_item’ => __( ‘Edit animal’ ),
‘new_item’ => __( ‘New animal’ ),
‘view_item’ => __( ‘View animal’ ),
‘search_items’ => __( ‘Search animals’ ),
‘not_found’ => __( ‘No animals Found’ ),
‘not_found_in_trash’ => __( ‘No animals found in Trash’ ),
);
$args = array(
‘labels’ => $labels,
‘has_archive’ => true,
‘public’ => true,
‘hierarchical’ => false,
‘supports’ => array(
‘title’,
‘editor’,
‘excerpt’,
‘custom-fields’,
‘thumbnail’,
‘page-attributes’
),
‘taxonomies’ => array( ‘post_tag’, ‘category’),
);
register_post_type( ‘тварини’, $args );
}
add_action( ‘init’, ‘wptp_create_post_type’ );
Потім зареєструйте таксономію сімейств тварин.
Якщо ви працюєте з темою, створеної в попередній статті, ви повинні будете додати до аргументів функції array(‘animal,’post’), призначений тільки для ‘animal’:
// реєстрація таксономії під назвою ‘Animal Family’
function wptp_register_taxonomy() {
register_taxonomy( ‘animal_cat’, array( ‘тварини’, ‘post’ ),
array(
‘labels’ => array(
‘name’ => ‘Animal Families’,
‘singular_name’ => ‘Animal Family’,
‘search_items’ => ‘Search Animal Families’,
‘all_items’ => ‘All Animal Families’,
‘edit_item’ => ‘Edit Animal Families’,
‘update_item’ => ‘Update Animal Family’,
‘add_new_item’ => ‘Add New Animal Family’,
‘new_item_name’ => ‘New Animal Family Name’,
‘menu_name’ => ‘Animal Family’,
),
‘hierarchical’ => true,
‘sort’ => true,
‘args’ => array( ‘orderby’ => ‘term_order’ ),
‘rewrite’ => array( ‘slug’ => ‘animal-family’ ),
‘show_admin_column’ => true
)
);
}
add_action( ‘init’, ‘wptp_register_taxonomy’ );
Збережіть файл функцій, після чого ви побачите, що в панелі адміністрування вашого сайту з’явилися ваші нові тип запису і таксономія.
Тепер додайте дані — я додала кілька тварин і записів для сімейства ‘Canines’.
3. Створення шаблону архіву
Тепер створіть файл з назвою taxonomy-animal_cat.php. Це буде шаблон архіву для нової таксономії.
Скопіюйте код оболонки з вашої теми в даний файл, так щоб він містив елементи і класи, спільні з іншою частиною теми. Я копіюю їх з twentyfourteen — якщо ви використовуєте власну тему, скопіюйте ці елементи з неї.
Скопіюйте всі, крім заголовка циклу, і додайте у верхній частині коментарі, які нагадають вам, для чого призначений цей файл:
4. Визначення запитуваного об’єкта
Щоб ви могли відобразити назву запитуваного терміна і визначити запити в двох циклах, які ви створите, вам необхідно визначити запитуваний об’єкт і зберегти його в якості змінної.
Додайте наступний код де-небудь у верхній частині шаблону архіву (я додаю його нижче виклику get_header()):
Ми використовуємо цей код на наступному етапі.
5. Висновок заголовка архіву
Перед додаванням циклу необхідно вивести заголовок сторінки вашого архіву. Всередині діва #content додайте наступний код:
name; ?>
6. Перший цикл
Під заголовком необхідно додати перший цикл, використовуючи WP_Query, так як ви повинні визначити аргументи.
По-перше, визначити запит:
// Визначення запиту
$args = array(
‘post_type’ => ‘animal’,
‘animal_cat’ => $term->slug
);
$query = new WP_Query( $args );
Зауважте, що тут використовується змінна $term, яку ви вже визначили.
Потім додаємо цикл, виводячи посилання для кожної тварини неупорядоченном списку:
if ($query->have_posts()) {
// вивід назви терміна в тегу заголовка
echo’
Тварина ‘ . $term->name . ‘Family
‘;
// висновок заголовків записів у списку
echo ‘
- ‘;
- перевірку на наявність записів за запитом — ви ж не хочете, щоб в іншому випадку виводився просто заголовок без відповідного списку;
- wp_reset_postdata() для скидання запиту — ви завжди повинні використовувати його з WP_Query.
- можна змінити цикли так, щоб для кожного з них виводився різний контент, наприклад характерні зображення або витяги для певних типів записів;
- додати різні стилі для кожного типу записів;
- змінити макет, щоб записи архівів виводилися горизонтально або по сітці. Приклад сайту, де я застосувала таку техніку, ви можете побачити тут;
- адаптувати цю техніку під категорії або архіви тегів, змінивши аргументи запиту.
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
‘;
} // завершення перевірки, чи містяться записи за запитом
// використовуємо скидання даних запису, щоб відновити оригінальний запит
wp_reset_postdata();
?>
Важливо включити в цей код два елемента:
7. Другий цикл
Другий цикл практично ідентичний першому, і відрізняється лише аргументами запиту:
‘post’,
‘animal_cat’ => $term->slug
);
$query = new WP_Query( $args );
if ($query->have_posts()) {
// вивід назви терміна в тегу заголовка
echo’
Blog Posts About the ‘ . $term->name . ‘Family
‘;
// висновок заголовків записів у списку
echo ‘
- ‘;
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
‘;
} // завершення перевірки, чи містяться записи за запитом
// використовуємо скидання даних запису, щоб відновити оригінальний запит
wp_reset_postdata();
?>
Тепер збережіть файл шаблону і перегляньте архів у браузері. Ви повинні побачити два списки, один з назвами тварин, інший — з записами:
Висновок
Таким чином, створюється архів таксономії для виводу списку записів за типом. Ви можете розширити цю техніку і зробити сторінки архівів ще цікавіше:
Я впевнений, що ви зможете придумати й інші варіанти!
Переклад статті «Taxonomy Archives: List Posts by Post Type» був підготовлений дружною командою проекту Сайтостроение від А до Я.