Що ви будете створювати

За замовчуванням 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 ‘