Що ви будете створювати
За замовчуванням WordPress створює архіви, в яких перераховані всі ваші записи по хронології в зворотній послідовності. Коли користувачі шукають запису до певної категорії або містять певний термін таксономії, їм доведеться відвідати сторінку архіву цієї категорії або терміна:
Але що, якщо ви хочете, щоб ваш головний архів записів певного типу став більш зручним? У цій статті я покажу, як створити сторінку архіву для записів типу, яка відображає записи даного типу, з розбивкою за категоріями таксономії.
Таким чином, замість одного довгого списку відвідувачі будуть бачити список по кожному терміну таксономії.
Що вам потрібно
Для роботи з цією статтею вам знадобиться встановлена і налаштована система WordPress і редактор коду. Ви будете створювати тему, яка є дочірньою для теми twentyfourteen, так що вам потрібно її встановити (вона є темою WordPress за замовчуванням).
Я не буду показувати вам, як створюється дочірня тема, але якщо це для вас проблема, просто погляньте на таблицю стилів в добірці кодів для цієї статті.
1. Приступаємо до роботи: реєстрація типу запису і таксономії
З мого досвіду ця техніка використовується частіше для записів типу і таксономії, ніж для стандартних записів і категорій або тегів, так що я почну з реєстрації типу запису і таксономії.
Примітка: Я використовую той же тип записів ‘animal’, який я зареєструвала у попередній статті щодо створення ілюстрованих архівів. Якщо ви захочете створити більш просунутий набір інструментів, ви можете об’єднати техніку, описану в тій статті, з технікою, яку я покажу вам тут, і виводити списки термінів таксономії на своєму сайті з характерними зображеннями.
Файл функцій вашої теми додайте наступний код, щоб зареєструвати тип записів:
// реєструємо користувальницький тип записів ‘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’ );
Потім додайте код для реєстрації таксономії:
// реєструємо таксономію ‘Animal Family’
function wptp_register_taxonomy() {
register_taxonomy( ‘animal_cat’, ‘animal’,
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’ );
Після того, як ви це зробили, додайте в ці розділи деякі дані. Нижче ви можете бачити дані, які я додала для застосовуваних термінів таксономії.
Я не особливо переймаюся достовірності моїх даних, зокрема приналежності деяких тварин до певних сімейств, тому, будь ласка, не пишіть у коментарях, що у мене що-то неправильно!
2. Настроювання шаблону архіву
Наступний крок полягає в створенні шаблону архіву для нового типу записів. У вашій темі створіть новий файл під назвою archive-animal.php.
Так як ця тема є дочірньою для теми twentyfourteen, для шаблону архіву потрібно код, скопійований з цієї теми в якості оболонки для користувача циклу, який ви збираєтеся створити.
Так що додайте шаблон архіву наступні рядки:
Примітка: Якщо ви працюєте з власною темою, скопіюйте код оболонки з індексного файлу або файлу архіву теми.
3. Заповнення шаблону архіву: вибірка термінів таксономії
Так як в архіві можуть виводитися тварини по термінам таксономії, наступним кроком, буде вибірка цих термінів.
У вашому новому файлі шаблону, нижче закривається тега (або нижче лівої частини коду оболонки, якщо ви використовуєте власну тему, введіть терміни, використовуючи get_terms():
‘count’,
‘hide_empty’ => 0
) );
?>
Зверніть увагу, що я використовувала тут два параметра:
- orderby — дозволяє вказати порядок відображення термінів. Я використовувала значення count, так що термін з найбільшою кількістю переданих йому записів буде відображатися першим, але ви можете задати порядок сортування по імені або ID — якщо залишити це поле порожнім, WordPress буде видавати значення по імені. Для більш докладної інформації ознайомтеся з розділом кодексу з get_terms();
- hide_empty — вказує WordPress не вибирати терміни, без призначених ним записів. При цьому якщо ви пізніше задасте той же запит, буде здійснюватися перевірка, чи не з’явилися нові записи.
4. Заповнення шаблону архіву: визначення запиту
Зробивши це, ви використовуєте foreach(), щоб вказати WordPress перебрати кожен з цих термінів і виконати запит, який потрібно визначити.
Нижче коду, який ви тільки що додали, вставити наступні рядки:
‘animal’,
‘animal_cat’ => $term->slug
);
$query = new WP_Query( $args );
}
Це вказує WordPress перебрати кожен термін, а потім визначити запит — він повинен запускатися кожен раз. Аргументи для запиту включають тип записів і термін таксономії ‘animal_cat’, який є значенням змінної $term.
5. Заповнення шаблону архіву: додавання циклу
Визначивши запит, вам потрібно додати цикл. Спочатку додається висновок в якості заголовка назви цього терміна. Нижче рядка, що починається з $query, але всередині фігурних дужок оператора foreach додайте цей рядок:
echo’
‘. $term->name . ‘
‘;
Потім додайте код, щоб виводити записи списком:
// висновок списком заголовків записів
echo ‘
- ‘;
echo ‘
‘;
Тепер усередині списку додайте цикл:
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
Як ви можете бачити, це просто цикл, який виводить назву кожного поста всередині посилання на запис, і не виводить витримки. Якщо хочете, ви можете додати тут витримку або характерне зображення.
І в кінці нижче рядка, зчитує echo ‘
‘;, скидається запит з допомогою wp_reset_postdata().
Весь цикл
Ось, як тепер буде виглядати запит і цикл:
‘animal’,
‘animal_cat’ => $term->slug
);
$query = new WP_Query( $args );
// висновок назв записи в тегах заголовків
echo’
‘. $term->name . ‘
‘;
// висновок списком заголовків записів
echo ‘
- ‘;
- викликати категорії або мітки замість термінів. Для цього вам потрібно використовувати get_categories() або get_tags();
- замість того щоб створювати користувальницький архів для записів, ви можете використовувати цю техніку в файлі index.php для виведення записів по категоріям, тегам або термінам таксономії;
- замість того щоб запускати один цикл для кожного терміна, запустити два: перший може відображати останню запис з цим терміном в повному обсязі, а другий — список всіх інших записів. Для цього використовуйте в аргументах запиту posts_per_page і offset — дізнатися, як це працює, ви можете в розділі кодексу WP_Query;
- використовувати posts_per_page, щоб обмежити число записів. Таким чином, кожен список буде мати однакову довжину. Ви можете поєднати це зі стилем для відображення списків горизонтально поруч один з одним;
- для кожного терміна, додати посилання на сторінку архіву терміну після списку записів — це особливо корисно, якщо у вашому списку ви не отображаете всі записи. Для цього використовуйте get_term_link().
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
‘;
// використовуємо скидання даних запису, щоб відновити оригінальний запит
wp_reset_postdata();
} ?>
Тепер збережіть файл шаблону і перегляньте архів даного типу записів. Ви побачите, що пости в ньому виводяться по термінам таксономії, а не одним довгим списком.
Висновок
Переклад статті «Taxonomy Archives: List Posts by Taxonomy’s Terms» був підготовлений дружною командою проекту Сайтостроение від А до Я.