Шаблон таксономии для произвольного типа записей

16 февр. 2015 г., 18:46:21
Просмотры: 27.4K
Голосов: 3

Я создал произвольный тип записей portfolio и конечно же taxonomy.

function taxonomies_portfolio() {
    $labels = array(
        'name'              => _x( 'Категории портфолио', 'taxonomy general name' ),
        'singular_name'     => _x( 'Категории портфолио', 'taxonomy singular name' ),
        'search_items'      => __( 'Поиск категорий портфолио' ),
        'all_items'         => __( 'Все категории портфолио' ),
        'parent_item'       => __( 'Родительская категория' ),
        'parent_item_colon' => __( 'Родительская категория:' ),
        'edit_item'         => __( 'Редактировать категорию портфолио' ),
        'update_item'       => __( 'Обновить категорию портфолио' ),
        'add_new_item'      => __( 'Добавить категорию портфолио' ),
        'new_item_name'     => __( 'Новая категория портфолио' ),
        'menu_name'         => __( 'Категории' ),
    );
    $args = array(
        'labels' => $labels,
        'hierarchical' => true,
        'rewrite' => true
    );
    register_taxonomy( 'portfolio_category', 'portfolio', $args );
}
add_action( 'init', 'taxonomies_portfolio', 0 );

Возможно ли создать 1 файл шаблона для отображения всех элементов одной категории? Я пытался создать taxonomy.php, но безуспешно. Какое правильное название шаблона нужно использовать?

6
Комментарии

Я создал пользовательский тип записи portfolio и его категории portfolio_categories, я могу видеть все работы в портфолио, используя archive-portfolio.php. А отдельные категории можно просматривать с помощью archive-portfolio_category.php, так как ваша таксономия называется portfolio_category.

Mayeenul Islam Mayeenul Islam
16 февр. 2015 г. 18:58:06

@MayeenulIslam Спасибо за ответ. Я создал файлы "archive-portfolio_category.php" и "taxonomy-portfolio_category.php", но без успеха. Мой плагин WhatTheFile по-прежнему показывает: archive.php

p2or p2or
16 февр. 2015 г. 19:06:02

Функция регистрации таксономии должна выглядеть так: register_taxonomy( 'portfolio_category', array( 'portfolio' ), $args );, а параметр rewrite может быть таким: 'rewrite' => array( 'slug' => 'portfolio-categories' ),

Mayeenul Islam Mayeenul Islam
16 февр. 2015 г. 19:09:11

Извините, в вашем случае перезапись будет выглядеть так: 'rewrite' => array( 'slug' => 'portfolio-category' ),, не забудьте также попробовать archive-portfolio-category.php (через дефис). Потому что я сам это не тестировал. :)

Mayeenul Islam Mayeenul Islam
16 февр. 2015 г. 19:16:01

@MayeenulIslam Спасибо за ваши усилия - проверил ваш код, обновил постоянные ссылки, но результат тот же -> archive.php

p2or p2or
16 февр. 2015 г. 19:19:16
Показать остальные 1 комментариев
Все ответы на вопрос 2
8

Согласно странице Codex WordPress о Иерархии шаблонов, вы создаёте файл шаблона с именем taxonomy-portfolio_category.php. WordPress будет использовать его для отображения архива таксономии. Вы также можете использовать taxonomy-portfolio_category-{term_name}.php для создания шаблонов под определённые термины в вашей таксономии.

16 февр. 2015 г. 18:52:38
Комментарии

Спасибо, Мэнни, но возможно ли использовать 1 шаблон для всех категорий вместо создания 3 шаблонов для 3 категорий?

p2or p2or
16 февр. 2015 г. 18:58:23

Да, первая часть моего ответа: taxonomy-portfolio_category.php

Manny Fleurmond Manny Fleurmond
16 февр. 2015 г. 19:08:21

Ок, спасибо Мэнни - но, к сожалению, это не сработало, нужно ли ещё что-то учитывать?

p2or p2or
16 февр. 2015 г. 19:13:17

Что не работает? Как вы это тестируете?

Manny Fleurmond Manny Fleurmond
16 февр. 2015 г. 19:20:13

Я протестировал "taxonomy-portfolio_category.php", но вместо него отображается archive.php.

p2or p2or
16 февр. 2015 г. 19:21:23

Какой URL вы используете?

Manny Fleurmond Manny Fleurmond
16 февр. 2015 г. 19:22:08

Хорошая идея, я использую: url/category/books/ Это неправильно?

p2or p2or
16 февр. 2015 г. 19:23:55

Для вашей таксономии должно быть portfolio_category/books

Manny Fleurmond Manny Fleurmond
16 февр. 2015 г. 19:26:50
Показать остальные 3 комментариев
0

Вам не обязательно использовать стандартные шаблоны WordPress для управления различными шаблонами таксономий для одного и того же пользовательского типа записи.

Предположим, у вас есть: 1) пользовательский тип записи portfolio с 1) таксономией pcat и 3) терминами 'sites', 'apps' и 'design', созданными в этой таксономии (здесь показаны их слаги).

Случай 1: Вы можете использовать один и тот же шаблон для любой из этих таксономий pcat. Просто используйте единый шаблон portfolio-single.php с кодом, который отображает любую запись portfolio единообразно.

Случай 2: Теперь предположим, что вы хотите показывать разные шаблоны для каждой записи portfolio в зависимости от термина таксономии pcat ('sites', 'apps', 'design' или любой другой), назначенного этой записи.

Вы можете сделать это, по-прежнему используя тот же portfolio-single.php, но с дополнительными частичными шаблонами для каждого термина pcat.

Ваш portfolio-single.php должен содержать этот код:

<?php
get_header();
// Здесь вы получаете конкретную запись типа `portfolio`.
global $post;
// Получаем массив терминов таксономии 'pcat', прикреплённых к записи,
// и берём слаг только первого термина (для краткости)
$txslug = get_the_terms($post, 'pcat')[0]->slug;
// Динамически формируем имя файла
$filename = get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
// Проверяем, существует ли файл и доступен ли для чтения
if (is_readable($filename)) {
    // Случай, когда вы создали частичный подшаблон для конкретного термина `pcat`.
    include get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
} else {
    // Случай для всех остальных терминов таксономии `pcat`.
    include get_template_directory() . '/partials/_portfolio-single-other.php';
}
get_footer();

Как видно из кода выше, вам нужно будет создать соответствующие частичные подшаблоны для каждого термина таксономии pcat, которые вы назначаете своим записям, и которые будут управлять внешним видом этого термина.

Или/и создать файл /partials/portfolio-single-other.php для обработки всех терминов, которые вы хотите отображать единообразно.

Это позволит сохранить ваши файлы темы хорошо организованными и без дополнительных затрат кода гибко управлять внешним видом различных терминов таксономии.

Примечание: Не забудьте повторно объявить global $post; в начале ваших шаблонов '/partials/_portfolio-single-'.$txslug.'.php'. Вы получите доступ к объекту пользовательского типа записи, который хотите отобразить, без дополнительных затрат.

23 янв. 2018 г. 07:55:45