ЗАВАНТАЖИТИ ВИХІДНІ ФАЙЛИ | ПОДИВИТИСЯ ДЕМО
Що ми будемо створювати
Якщо для класифікації інформації на вашому сайті використовується кілька класифікацій, вам може знадобитися можливість поділу записів в архіві таксономії по термінам другий таксономії.
У цій статті я покажу вам, як створити сторінку таксономії, на якій записи будуть виводитися у відповідності з термінами другий таксономії, до якої вони належать.
Потім я створю другий архів таксономії для другої таксономії, на якій записи будуть виводитися вже в відповідності з термінами першої таксономії.
Що нам знадобиться:
- Встановлена система WordPress;
- Редактор коду.
1. Створення теми
Для цієї статті я створю дочірню тему twentyfourteen з двома новими файлами шаблонами, стилями і файлом функцій. Якщо ви працюєте зі своєю власною темою, просто скопіюйте код у файл функцій вашої теми і додайте файли шаблонів.
Щоб створити тему, я розміщую у порожній теці теми файл з ім’ям style.css і додаю в нього наступний код:
/*
Theme Name: WPTutsPlus Create a Taxonomy Archive to List Posts by a Second Taxonomy’s Terms
Theme URI: http://rachelmccollin.co.uk/wptutsplus-taxonomy-archive-list-by-second-taxonomy/
Description: Theme to support WPTutsPlus tutorial on creating a custom taxonomy archive. Child theme for the Twenty Fourteen theme.
Author: Rachel McCollin
Author URI: http://rachelmccollin.co.uk/
Template: twentyfourteen
Версія: 1.0
*/
@import url(«../twentyfourteen/style.css»);
Таким чином, ми створимо дочірню тему.
2. Реєстрація типу записів і таксономій
Для цієї статті я буду використовувати той же тип записів ‘animals’ і таксономію ‘animal_cat’, які я використовувала у статті про створення шаблону користувальницького типу записів. Я також додам ще одну таксономію під назвою ‘habitat’.
Для цього я створюю новий файл з ім’ям functions.php. По-перше, я додаю функцію, щоб зареєструвати мій тип записів:
__( ‘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(
‘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
)
);
// Реєструємо таксономію ‘Habitat’
register_taxonomy( ‘habitat’, ‘animal’,
array(
‘labels’ => array(
‘name’ => ‘Habitats’,
‘singular_name’ => ‘Habitat’,
‘search_items’ => ‘Search Habitats’,
‘all_items’ => ‘All Habitats’,
‘edit_item’ => ‘Edit Habitat’,
‘update_item’ => ‘Update Habitat’,
‘add_new_item’ => ‘Add New Habitat’,
‘new_item_name’ => ‘New Habitat Name’,
‘menu_name’ => ‘Habitat’,
),
‘hierarchical’ => true,
‘sort’ => true,
‘args’ => array( ‘orderby’ => ‘term_order’ ),
‘show_admin_column’ => true
)
);
}
add_action( ‘init’, ‘wptp_register_taxonomies’ );
?>
Ми створили тип записів ‘animal’ і дві таксономії, які до нього застосовуються. Зверніть увагу, що я використовувала ‘show_admin_column’, щоб пізніше мені було простіше адмініструвати запису.
Після додавання інформації і класифікації тварин згідно з різними класифікаціями, ці дані будуть відображатися в панелі адміністрування WordPress наступним чином.
3. Створення файлу шаблону першої таксономії
Наступним кроком є створення файлу шаблону для таксономії архіву ‘animal_cat’. У папці теми створіть файл і назвіть його taxonomy-animal_cat.php. Тепер додайте в нього код «обгортки» з вашої теми (я скопіювала його з батьківського теми; якщо ви використовуєте власну тему, ваш код буде відрізнятися):
Визначення поточного запитуваної терміна
Для створення користувальницького запиту по кожному терміну шаблон архіву буде використовувати WP_Query. Одним з популярних об’єктів буде термін поточної таксономії, який в даний момент відображається, тому нам потрібно визначити його і зберегти в якості змінної.
Нижче рядка get_header (), додайте наступний код:
Ви можете використовувати змінну $animalcat пізніше.
Висновок заголовка сторінки
Зараз архіви не мають основного заголовка, так що нам потрібно додати його, використовуючи змінну, яку ми тільки що визначили.
Після цього тега
додайте наступний код:
name; ?>
Отримання термінів другий таксономії
Далі потрібно отримати список термінів другий таксономії. Нижче коду, який ви тільки що додали, вставити наступні рядки:
0
) );
?>
Даний код отримує список всіх термінів і зберігає його в масив. З допомогою ‘hide_empty’ ви можете приховати всі порожні терміни. Але це тільки запобігає запити термінів, до яких не належить ні одна із записів, а не тих термінів, які не призначені постам, що належить відповідного терміну.
Створення циклу
Тепер створіть цикл, який буде запускатися для кожного терміна:
‘animal’,
‘animal_cat’ => $animalcat->slug,
‘habitat’ => $term->slug
);
$query = new WP_Query( $args );
// виводимо назва терміна в тегу заголовка
echo’
‘. $term->name . ‘ habitat
‘;
// виводимо заголовки записів списком
echo ‘
- ‘;
- Для кожного терміна визначається новий запит;
- Аргументи запиту включають другий термін таксономії ($term) і поточний найпопулярніший термін ($animalcat);
- Якщо таксономії застосовуються тільки до одного типу записів, ми могли б не використовувати аргумент ‘post_type’, але я віддаю перевагу включати його на всякий випадок;
- Змінна $term використовується для виведення заголовка кожного розділу, використовуючи $term->name.
- відкоригувати коментарі в верхній частині файлу;
- змінити назву змінної $animalcat на $habitat;
- відредагувати заголовок
для відображення поточного запитуваної терміна в ньому використовувалася змінна $habitat;
- змінити перший параметр функції get_terms(), щоб у ній використовувався термін animal_cat, а не habitat;
- відредагувати аргументи запиту, змінивши значення ‘habitat’ на ‘animal_cat’;
- відредагувати вміст тега
в циклі, щоб воно відповідало сімейств тварин, а не місць їх проживання.
- Повторити процес вилучення термінів, визначення запиту і запуск циклу для третього терміну після другого, щоб у вас вийшло два окремих списку;
- Звести дані з використанням всіх трьох умов, використавши кожну змінну $term для $habitat або $animalcat, і додавши додатковий оператор foreach() всередині існуючого оператора foreach(). В такому разі вам потрібно буде подумати про те, як вивести отримані дані: списком або за допомогою сітки.
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
‘;
// скидаємо postdata, щоб відновити початковий запит
wp_reset_postdata();
} ?>
Кілька зауважень по цьому коду:
Тепер збережемо файл шаблону і подивимося на архів таксономії для одного з термінів Animal Family:
Додавання перевірки записів для кожного запиту
Зараз шаблон виводить порожній список. Але це легко виправити, перевіривши, чи кожен запит запису.
Оберніть цикл наступний код:
if ( $query->have_posts() ) {
}
Тепер цикл буде виглядати наступним чином:
if ( $query->have_posts() ) {
// виводимо назва терміна в тегу заголовка
echo’
‘. $term->name . ‘ habitat
‘;
// виводимо заголовки записів списком
echo ‘
- ‘;
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
‘;
}
Таким чином, цикл WordPress не буде запускатися, якщо запит не містить записів, а порожні заголовки будуть видалятися. Тепер сторінка архіву виглядає наступним чином:
Створення файлу шаблону для другої таксономії
Останнім кроком є створення файлу шаблону для другої таксономії.
Скопіюйте перший файл шаблону і перейменуйте його в taxonomy-habitat.php. Відредагуйте його, щоб виправити термінологію. Нам потрібно виконати наступні виправлення:
Новий файл шаблона буде виглядати наступним чином:
Habitat — name; ?>
0
) );
?>
‘animal’,
‘animal_cat’ => $term->slug,
‘habitat’ => $habitat->slug
);
$query = new WP_Query( $args );
if( $query->have_posts() ) {
// виводимо назва терміна в тегу заголовка
echo’
‘. $term->name . ‘ family
‘;
// виводимо заголовки записів списком
echo ‘
- ‘;
// Початок циклу
while ( $query->have_posts() ) : $query->the_post(); ?>
‘;
}
// скидаємо postdata, щоб відновити початковий запит
wp_reset_postdata();
} ?>
Після внесення цих змін збережіть новий файл шаблону і подивіться, як виглядає ваш архів:
Тепер у вас є сторінка для другої таксономії, яка працює таким же чином, як і для першої таксономії.
Висновок
З цієї статті ви дізналися, як відображати дані з використанням декількох класифікацій. Можна додати третю таксономію одним з двох способів:
Чому б вам не спробувати це?
Переклад статті «Taxonomy Archives: List Posts by a Second Taxonomy’s Terms» був підготовлений дружною командою проекту Сайтостроение від А до Я.