WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Добавление полей к терминам таксономии

Advanced Custom Fields

В этом гайде рассмотрим процесс создание произвольных полей для терминов любой таксономии и вывода их значений в шаблоне темы.

Терминами могут быть рубрики (категории), метки (теги) или произвольной таксономии, к примеру рубрики товаров 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/id_7654/ierarhiya-fajlov-temy-shablona.html
 *
 * @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;
8 комментов
  • Здравствуйте, я добавил поле к рубрике как и было описано в инструкции, оно появилось, но редактировать(а для меня это крайне важно) его я не могу.
    Может кто нибудь подскажет в чем проблема?

    2
    Ответить01.Фев.2019 в 15:56 #
    • campusboy3434 www.youtube.com/c/wpplus

      Здравствуйте. Что значит не можете? Приложите скриншот проблемы.

      Ответить01.Фев.2019 в 16:57 #
      • Это скриншот создания новой категории(поле таксономии я отметил стрелочкой)

        А это я редактирую категорию и заданного поля нет:

        и на всякий случай скриншот настроек поля:

        Ответить01.Фев.2019 в 18:56 #
        • campusboy3434 www.youtube.com/c/wpplus

          Какая у Вас версия WordPress и ACF?
          У Вас есть поле с картинкой там, как оно добавлено?

          P.S.: Повторил то что Вы делали, у меня и при добавлении рубрики есть поле и при её редактировании, так что не вижу проблемы. У меня ACF PRO 5.7.7.

          Ответить01.Фев.2019 в 19:00 #
          • Версия плагина: ACF PRO 5.3.0

            И версия WordPress: 5.0.3

            Ну а на счет картинки, так это я добавил с помощью плагина Taxonomy Images

            Но мысль я понял, спасибо!

            Ответить01.Фев.2019 в 22:18 #
  • Как забрать картинку из какой-то определенной таксономии?
    Так не работает:

    foreach
    $feel_term_image = get_field('featured_term_image', $feel_term->term_ID);

    Но ведь $feel_term->term_ID отдает id.

    Ответить16.Ноя.2019 в 08:43 #
  • Баха

    А можно ли повторитель вывести в рубрике?

    Ответить02.Дек.2019 в 10:29 #