Как добавить произвольную таксономию в WordPress? Код для вывода записей и терминов таксономии.

Таксономии дают возможность веб разработчикам создавать более сложные и структурированные проекты на WordPress. По своему принципу таксономия напоминает каталог, в котором по группам расположены определенные виды записей.

Стоит отметить, что таксономия – это как общий элемент структуризации данных, при работе с постами вы будете работать с элементами таксономии, которые называют «terms» («термины»). Давайте наглядно разберем пример. В админке WordPress, есть раздел «Рубрики» — это и есть таксономия, а созданные в нем элементы, например «Квартиры» — это термины, непосредственно к которым вы и привязываете ваши записи, а в последующем выводите их на сайте.

 Все таксономии разделяют на два типа: древовидные и линейные.

Древовидные это те, которые позволяют создавать дочерние подрубрики к основной рубрике. В итоге, такая структура может иметь вид: «Квартиры» — «Однокомнатные». Пример древовидных таксономий – это рубрики постов.

Линейные – это независимые друг от друга термины. Ярким примером линейных таксономий в WordPress являются метки.

Таксономии WordPress «из коробки»

По дефолту в данной CMS есть четыре типа таксономий.

  • Рубрики (древовидная).
  • Метки (линейная).
  • Ссылки (линейная).
  • Меню навигации (древовидная).

Как добавить свою таксономию в WordPress?

Для создания кастомных таксономий в WordPress используют функцию — register_taxonomy(). Если вы не хотите разбираться с ее опциями, то можете использовать плагин, например – «Custom Post Type UI». Но, если вы планируете разрабатывать сайты на этом движке, я рекомендую вам разобраться с работой таксономий, так как в любом случае вы будете использовать их на практике при разработке коммерческих проектов.

Для того чтобы добавить свою таксономию, вам нужно будет внести код в файл function.php вашей темы используемой на сайте. Перед тем, как вносить изменения сделайте бэкап самого файла, или же бэкап сайта! Код добавляют внизу файла function.php, или же создают файл php формата в папке inc, после чего подключают его в файле function.php.

Вот пример кода, который добавит таксономию «Квартиры» на ваш сайт.

//Таксономия "Квартиры"
add_action( 'init', 'create_taxname', 0 );
function create_taxname () {
$args = array(
    'label' => _x( 'Квартиры', 'taxonomy general name' ),
    'labels' => array(
    'name' => _x( 'Квартиры', 'taxonomy general name' ),
    'singular_name' => _x( 'Квартиры', 'taxonomy singular name' ),
    'menu_name' => __( 'Квартиры' ),
    'all_items' => __( 'Все квартиры' ),
    'edit_item' => __( 'Изменить квартиру' ),
    'view_item' => __( 'Просмотреть квартиры' ),
    'update_item' => __( 'Обновить квартиру' ),
    'add_new_item' => __( 'Добавить новую квартиру' ),
    'new_item_name' => __( 'Название' ),
    'parent_item' => __( 'Родительская' ),
    'parent_item_colon' => __( 'Родительская:' ),
    'search_items' => __( 'Поиск квартир' ),
    'popular_items' => null,
    'separate_items_with_commas' => null,
    'add_or_remove_items' => null,
    'choose_from_most_used' => null,
    'not_found' => __( 'Квартиру не найдено.' ),
    ),
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => true,
    'show_tagcloud' => true,
    'show_in_quick_edit' => true,
    'show_in_rest' => true,
    'meta_box_cb' => null,
    'show_admin_column' => false,
    'description' => '',
    'hierarchical' => true,
    'update_count_callback' => '',
    'query_var' => true,
    'rewrite' => array(
    'slug' => 'flat',
    'with_front' => false,
    'hierarchical' => true,
    'ep_mask' => EP_NONE,
),
    'sort' => null,
    '_builtin' => false,
);
register_taxonomy( 'flat', array('post'), $args );
}

Первый блок опций – это текстовые переводы пунктов меню и заголовков. Все что ниже – это настройка дополнительных параметров. Ниже описание основных настроек.

  • ‘public’ => true, — true/false, Разрешение на использование.
  • ‘show_ui’ => true, — Добавить на страницу создания меню.
  • ‘show_in_menu’ => true, — Показывать таксономию в админке меню сайта. Значение аргумента ‘show_ui’ должно быть true.
  • ‘show_in_nav_menus’ => true, — Добавить или исключить таксономию в навигации сайта «Внешний вид -> Меню. Значение аргумента ‘show_ui’ должно быть true.
  • ‘show_tagcloud’ => true, — Разрешить облако тегов для этой таксономии.
  • ‘show_in_quick_edit’ => true, — Разрешить показ таксономии в меню быстрого доступа
  • ‘show_in_rest’ => true, — Включает поддержку REST API. Благодаря этому параметру в блочном редакторе таксономии отображается выбор нашей таксономии.
  • ‘meta_box_cb’ => null, — показ метабокса с таксономией в записи.
  • ‘show_admin_column’ => false, — автоматическое создание столбцов таксономии в таблице ассоциативных типов постов.
  • ‘description’ => », — описание таксономии в таблице со всеми таксономиями.
  • ‘hierarchical’ => true, — включить древовидность как у рубрик или лиейность как у меток. По умолчанию: false.
  • ‘update_count_callback’ => », — название функции, вызываемой после обновления ассоциативных типов объектов записи.
  • ‘query_var’ => true, — разрешение на использование query_var.
  • ‘rewrite’ => array( — начало настроек для URL
  • ‘slug’ => ‘flat’, — Текст в ЧПУ. По умолчанию: название таксономии. Можете задать свое.
  • ‘with_front’ => false, — возможность добавить ссылку к базовому URL
  • ‘hierarchical’ => true, — использование древовидной структуры ссылок
  • ‘ep_mask’ => EP_NONE, — перезапись конечного значения таксономии. По умолчанию: EP_NONE.
  • ‘sort’ => null, — сортировка постов по порядку создания.
  • ‘_builtin’ => false, — настройка таксономии, будет ли она собственной или встроенной. Не используйте этот аргумент при регистрации собственной таксономии. По умолчанию: false.
  • register_taxonomy( ‘flat’, array(‘post’), $args ); — в этой строке мы регистрируем нашу таксономию, где flat — это новое имя.

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

Итак, для того, чтобы вам добавить свою таксономию вам нужно переименовать «flat», на название вашей таксономии, а также внести правки по тестовым переводам в админке.

Для каких задач используются кастомные таксономии?

Основная цель применения кастомных таксономий в WordPress – это структуризация и удобная работа с большим объемом данных. Давайте представим ситуацию, что у вас свое агентство по сдаче жилья в аренду. Каждую запись о квартире вам нужно привязывать к различным параметрам поиска, который будет осуществлять пользователь на вашем сайте. Это могут быть следующие опции: количество комнат, район, ценовой сегмент и другие.

И тут у вас есть два пути для сегментации.

  1. Создаете в дефолтном меню «Рубрики» категории «Однокомнатная квартира», «Близко к центру», «Недорогая» и так далее. Таких рубрик будет много по каждому из параметров. Со временем, при добавлении большого количества объектов, редактировать и тем более искать нужные варианты рубрик будет неудобно, к тому же усложняется код для вывода рубрик на сайте, по параметрам фильтра.
  2. Создаем новые таксономии: number_of_rooms, location_area, price. В каждой таксономии добавляем термины по нужным опциям, например, однокомнатная, двухкомнатная и так далее. При редактировании поста, вы сможете в удобном формате выбирать нужную вам опцию, что упростит работу контент-менеджеров и уменьшит вероятность ошибок в информации.

Вот как выглядит вид выбора таксономии при редактировании записи.

Пример запроса по поиску недорогой однокомнатной квартиры возле центра города.

<?php
$flat = get_posts( array(
     'posts_per_page'   => 10,
     'orderby'          => 'date',
     'post_type'        => 'post',
     'number_of_rooms'  => 'studio',
     'location_area'    => 'center',
     'price'            => 'cheap'
) );
?>

Если у вас под квартиры создан отдельный тип записи, например «flat», то в коде выше меняем значение параметра ‘post_type’, вместо ‘post’ указываем ‘flat’.

Как задать шаблон для таксономии в WordPress?

Иногда стоит задача интегрировать другой дизайн для страницы таксономии, например, сделать вывод в виде сетки, или же вывести дополнительные произвольные поля для записей таксономии, например количество комнат или же локацию для квартиры.

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

Вот те виды шаблонов таксономий, которые вы можете использовать при разработке сайтов.

  • taxonomy-{taxonomy}-{slug}.php. Это тот вариант, когда шаблон задают под конкретную таксономию, например taxonomy-price-cheap.php, для недорогих видов квартир.
  • taxonomy-{taxonomy}.php. Тут работает логика, что если таксономия price, то используем данный шаблон, в том числе и для вложенных терминов: cheap, expensive и другие.
  • taxonomy.php. Шаблон для всех кастомных таксономий у вас на сайте.
  • archive.php. Берется следующим, если не найдены предыдущие варианты.
  • index.php. Является базовым и используется в случае отсутствия выше приведенных вариантов.

Для примера в моем случае можно создать шаблон taxonomy-flat.php в таком случае шаблон будет работать для всех терминов таксономии «flat».

<?php
/**
 * Шаблон для таксономии flat
 */
get_header();
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
?>
<div class="wrapper">
  <div class="primary-content">
    <h1 class="archive-title"><?php echo apply_filters( 'the_title', $term->name ); ?></h1>

    <?php if ( !empty( $term->description ) ): ?>
    <div class="archive-description">
      <?php echo esc_html($term->description); ?>
    </div>
    <?php endif; ?>

    <?php if ( have_posts() ): while ( have_posts() ): the_post(); ?>

    <div id="post-<?php the_ID(); ?>" <?php post_class('post clearfix'); ?>>
      <h2 class="post-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
      <div class="content clearfix">
        <div class="entry">
          <?php the_content( __('Подробнее…') ); ?>
        </div>
      </div>
    </div><!--// end #post-XX -->

    <?php endwhile; ?>

    <?php else: ?>

    <h2 class="post-title">Нет вариантов в разделе <?php echo apply_filters( 'the_title', $term->name ); ?></h2>
    <div class="content clearfix">
      <div class="entry">
        <p>Пока нет предложений в разделе <strong><?php echo apply_filters( 'the_title', $term->name ); ?></strong> Возможно, они скоро появятся.</p>
      </div>
    </div>

    <?php endif; ?>
  </div><!--// end .primary-content -->

  <div class="secondary-content">
    <?php get_sidebar(); ?>
  </div><!--// end .secondary-content -->

<?php get_footer(); ?>

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

В данном примере кода используется функция get_term_by(), она включает в себя все данные связанные с таксономией.

  • ID
  • name
  • slug
  • group
  • taxonomy
  • description
  • parent
  • count

Пример использования этих данных вы можете видеть в коде выше, вот один из кусков по выводу названия термина таксономии: $term->name, где переменная $term содержит массив данных о таксономии.

Использование условных операторов для вывода записей привязанных к определенным таксономиям

Условные операторы часто используются для вывода контента на страницах с определенными параметрами. Давайте рассмотрим подробнее, как выполняются условия.

  • is_tax(). Если выводиться страница архива любой таксономии.
  • is_tax( ‘flat’ ). Если выводиться архивная страница таксономии «flat».
  • is_tax( ‘flat’, ‘cheap’). Если выводиться архив записей из таксономии «flat», включающий термин «cheap».
  • is_tax( ‘flat’, array( ‘cheap’, ‘ expensive ‘) ), если необходимо задать массив терминов.
  • taxonomy_exists(). Если таксономия таксономия зарегистрированная через функцию — register_taxonomy().

Теперь давайте рассмотрим несколько примеров по использованию функций для вывода таксономий и связанных с ними постов на сайте.

Как вывести список терминов таксономии в WordPress?

Для этих целей используется функция — wp_list_categories(), которая имеет много опций для настройки вывода терминов.

Вот пример кода.

<?php
$flats_list = wp_list_categories( array(
  'taxonomy' => 'flat',
  'orderby' => 'date',
  'show_count' => 0,
  'pad_counts' => 0,
  'hierarchical' => 1,
  'echo' => 0,
  'title_li' => 'Список квартир'
) );

// Выведет информацию в том случае, если существуют термины со статьями.
if ( $flats_list )
  echo '<ul class="flats-list">' . $flats_list . '</ul>';

?>

Как вывести посты для выбранной таксономии в WordPress?

Для того чтобы выводить записи из отдельных таксономий используется классы: WP_Query или же tax_query, которые за счет параметров позволяют очень гибко выводить необходимые посты на сайте.

<?php
$flats_query = new WP_Query( array(
  'post_type' => 'post',
  'posts_per_page' => 10,
  'tax_query' => array(
    array(
      'taxonomy' => 'flat',
      'field' => 'slug',
      'terms' => 'cheap'
    )
  )
) );
// Выводим записи циклом
if ( $flats_query->have_posts() ): ?>
<h2>Варианты аренды недорогих квартир</h2>
<ul class="postlist">
  <?php while ( $flats_query->have_posts() ) : $flats_query->the_post(); ?>
  <li><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></li>
  <?php endwhile; wp_reset_postdata(); ?>
</ul><!--// end .postlist -->
<?php endif; ?>

На примере выше мы получим последние 10 записей, которые принадлежат таксономии «flat», c термином «cheap».

Также для этой задачи можно использовать функции: get_terms() и get_term_by().

Как вывести заголовок текущей таксономии?

Для этого используется функция — single_term_title().

<?php single_term_title( $prefix, $display ); ?>

Где $prefix – это текст, который будет показан перед заголовком.

Пример использования:

<p><?php single_term_title('Название раздела: '); ?>.</p>

Как получить id таксономии?

В WordPress для этого существует специальная функция, которая называется: get_term_by().

Она принимает следующие параметры:

get_term_by( $field, $value, $taxonomy, $output, $filter );

где $field – может принимать slug, name, term_taxonomy_id, id. $value – это значение которое нужно найти, и $taxonomy – это название произвольной таксономии.

Пример использования:

<?php
$term = get_term_by( 'name', 'Flats', 'category');
$taxonomy_id = $term->term_id;
?>

Выводы. В этой статье представлены основы работы с таксономиями в WordPress. Есть много нюансов, но я привел лишь часто используемые на практике куски кода. Рекомендую разобраться с этим функционалом движка и в будущем использовать его на своих проектах.

Поделиться в социальных сетях:
Нет комментариев к данной статье

Оставить новый комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *