Вопрос или проблема
Я использую классический редактор и отключил блоки Гутенберга и глобальные стили.
Я создал пользовательский тип записи под названием “Ресурсы”, для которого я также создал архив archive-resources.php
.
Я создал пользовательское поле таксономии с меткой “Тип ресурса” (имя: res_type), которое связано с Ресурсами и имеет внешний вид кнопки радио.
Я создал таксономию для моего пользовательского типа записи и пользовательского поля с меткой “Материалы” (три варианта материалов: “Книга”, “Курс” и “Электронная книга”).
В моем архивном файле я начал цикл if ( have_posts() ) : while ( have_posts() ) : the_post();
, и в цикле я пытаюсь отобразить, какой Материал был выбран из пользовательского поля таксономии в созданном Ресурсе.
Изначально я пытался использовать следующий код:
$res_type = get_field('res_type');
if ($res_type) {
echo '<h4 class="open-sans-lite resource-subtitle smaller-text">'.esc_html($res_type).'</h4>';
}
Этот код не работает, потому что если “Return Value” моего пользовательского поля таксономии установлен на ID, он возвращает только число, а если установлен на Object, возвращает ошибку (“фатальная ошибка/исключение”).
Затем я попробовал этот код:
$res_type = get_field('res_type');
if ($res_type) {
echo '<h4 class="open-sans-lite resource-subtitle smaller-text">'.esc_html($res_type->name).'</h4>';
}
Однако это привело к отсутствию чего-либо в моем HTML, даже пустого элемента H4.
Я также пытался использовать get_field_object()
, но безрезультатно.
Пожалуйста, помогите мне понять, как получить таксономию “Книга”, “Электронная книга” или “Курс”, которая выбрана для их соответствующего Ресурса из пользовательского поля таксономии в цикле.
Ответ или решение
Для решения проблемы, связанной с использованием Advanced Custom Fields (ACF) и получения значений таксономии в пользовательском типе записей в WordPress, необходимо понять основы работы ACF, таксономий и их взаимоотношений. Вы описали ситуацию, когда ваш сайт работает на классическом редакторе и вы создали пользовательский тип записей и связанные с ним таксономии и пользовательские поля.
Теория
В WordPress таксономии используются для классификации контента. Они помогают организовать информацию на сайте и позволяют пользователям легко находить нужные записи. Advanced Custom Fields (ACF) расширяет стандартные возможности WordPress, позволяя добавить пользовательские поля и группы полей к записям, пользователям, таксономиям и другим элементам.
В вашем случае вы создали пользовательский тип записей "Resources" и настроили таксономию "Materials" с вариантами "Book", "Course" и "eBook". Поле "res_type" является пользовательским полем ACF, где вы выбрали радио-кнопки для выбора значения таксономии. Проблема заключается в корректном отображении выбранного значения из этого поля на странице архива.
Пример
Ваш код сталкивается с несколькими проблемами. Во-первых, функция get_field('res_type')
возвращает разные значения в зависимости от конфигурации параметров возвращаемого значения. Когда вы выбираете "Return Value" в виде ID, это означает, что функция вернет числовой идентификатор термина таксономии. Когда вы выбираете "Object", она должна возвращать объект термина, но, скорее всего, код неправильно обрабатывает объект, что приводит к ошибкам.
Применение
Чтобы успешно извлечь и отобразить нужное значение, вам необходимо следовать нескольким ключевым шагам:
-
Проверка настроек ACF: Убедитесь, что параметр "Return Value" для вашего пользовательского поля "res_type" установлен в соответствующее значение, например, "Object", чтобы вы могли извлекать необходимую информацию.
-
Исправление кода для получения имени термина:
Если вы возвращаете объект, используйте корректную обработку объекта термина. Например:$res_type = get_field('res_type'); if ($res_type && isset($res_type->name)) { echo '<h4 class="open-sans-lite resource-subtitle smaller-text">'.esc_html($res_type->name).'</h4>'; }
Убедитесь, что перед обращением к свойству
name
вы проверяете наличие самого объекта и данного свойства. -
Работа с идентификаторами: Если вы предпочитаете работу с идентификаторами терминов, вам нужно дополнительно извлечь объект термина с использованием функции
get_term()
:$res_type_id = get_field('res_type'); if ($res_type_id) { $term = get_term($res_type_id); if (!is_wp_error($term) && $term) { echo '<h4 class="open-sans-lite resource-subtitle smaller-text">'.esc_html($term->name).'</h4>'; } }
Здесь важно не только получить термин, но и проверить ошибки и наличие объекта.
-
Тестирование: После внесения изменений, протестируйте код в вашем шаблоне архива
archive-resources.php
, чтобы убедиться, что данные отображаются корректно. -
Отладка: Используйте
error_log()
или иные методы логирования, если данные все еще не отдаются. Это поможет понять, какие данные приходят отget_field()
, и как они обрабатываются.
Следуя этим рекомендациям, вы сможете успешно использовать таксономии и пользовательские поля в вашем проекте WordPress, исправив любые ошибки, связанные с извлечением и отображением данных. Убедитесь, что ваша тема и плагины обновлены до последних версий для предотвращения потенциальных конфликтов.