Добавление полей к терминам таксономии
Advanced Custom Fields (ACF)- Все Функции ACF
- Все Хуки ACF
- Регистрация полей через PHP
- Шорткод [acf]
- Добавление полей к определенной рубрике
- Добавление полей к терминам таксономии
- Преобразование шорткодов в полях в админке
- Функция Local JSON
В этом гайде рассмотрим процесс создание произвольных полей для терминов любой таксономии и вывода их значений в шаблоне темы.
Терминами могут быть рубрики (категории), метки (теги) или произвольной таксономии, к примеру рубрики товаров WooCommerce, их атрибуты и так далее.
Полезные статьи:
Чтобы зарегистрировать пользовательскую таксономию используйте register_taxonomy(), а также читайте о том, что же такое таксономии в WordPress.
Добавление полей
С помощью Advanced Custom Fields добавлять произвольные поля для терминов таксономий очень просто, вот что нужно сделать:
- В пункте меню "Custom Fields" выбрать подпункт "Add New", чтобы создать новую группу произвольных полей.
- Добавьте нужные типы полей, которые хотите видеть при добавлении и редактировании термина.
- В секции «Locations» выберите условие, чтобы группа полей отображалась для терминов нужной таксономии. К примеру, на скриншоте ниже выбрано условие показа группы полей для рубрик.
Редактирование полей
После того, как группа полей создана и указано, для каких терминов таксономии их показывать, можно при добавлении нового или редактировании старого увидеть наши поля и указать значения. В нашем примере это стандартные рубрики WordPress.
Отображение значений полей
Чтобы вывести значения полей, нужно отредактировать код шаблона вывода архивной страницы таксономии, к примеру для Рубрик это category.php, для меток - tag.php или же общий шаблон taxonomy.php/archive.php. В зависимости от вашей темы, вы также можете использовать фильтры или части шаблона для кастомизации.
Чтобы легко определить, какой файл редактировать, прочитайте статью Иерархия файлов темы (шаблона).
Настройка HTML-кода для таксономии WordPress может быть легко выполнена путем редактирования файла category.php, tag.php или taxonomy.php в вашей теме. В зависимости от вашей темы вы также можете использовать шаблонные части или фильтры для настройки HTML.
В нашем случае мы произвольные поля добавили к Рубрикам, поэтому мы будем редактировать файл category.php
, используя тему Twenty Seventeen. В этом шаблоне мы выведем картинку для рубрики сразу после шапки сайта виде бэкграунда и зададим цвет заголовков у постов.
<?php /** * Шаблон вывода архивной страницы Рубрики * * @link https://wp-kama.ru/handbook/theme/theme-files-hierarchy * * @package WordPress * @subpackage Twenty_Seventeen * @since 1.0 * @version 1.0 */ get_header(); // Получаем данные текущего термина (рубрики) $term = get_queried_object(); // Получаем значения произвольных полей $image = get_field('image', $term); $color = get_field('color', $term); ?> <style type="text/css"> .entry-title a { color: <?php echo $color; ?>; } <?php if( $image ): ?> .site-header { background-image: url(<?php echo $image['url']; ?>); } <?php endif; ?> </style> <div class="wrap"> <?php // Далее идёт оставшийся код шаблона ?>
В итоге получим следующий результат:
Вывод полей определенного термина
Если нужно вывести значение произвольного поля в не шаблона термина, то воспользуйтесь следующими вариантами, указывая их вторым аргументом в функциях get_field()
/the_field()
:
Пример | Формат | Описание |
---|---|---|
category_123 | $taxonomy . '_' . $term_id | Строка содержит название таксономии и ID термина. |
term_123 | term_' . $term_id | Строка содержит слово term и ID термина. Добавлено в версии 5.5.0. |
WP_Term | Объект термина. Его можно получить множеством способов, например функцией get_term(). |
Например, пусть у нас есть тестовое поле с именем my-field
у стандартных рубрик WordPress и надо вывести его значение:
// 1 вариант the_field('my-field', 'category_123'); // 2 вариант the_field('my-field', 'term_123'); // 3 вариант $term = get_term( 123 ); the_field('my-field', $term);
Авто-встраивание
Когда вы используете типа поля "Визуальный редактор" (WYSIWYG ) для термина таксономии, то авто-встраивание (auto-embed) может не работать. Функция авто-встраивания работает только в постах. То есть, если вывести на странице рубрики во фронт-энде контент поля "Визуальный редактор", в котором есть ссылка на YouTube-ролик, то она не будет преобразована автоматически. Чтобы решить эту проблему используйте следующий код, к примеру, в category.php:
// Переменные $queried_object = get_queried_object(); $taxonomy = $queried_object->taxonomy; $term_id = $queried_object->term_id; $GLOBALS['wp_embed']->post_ID = $taxonomy . '_' . $term_id;