Get_Field для таксономии возвращает ошибку, ID или ничего ACF

Вопрос или проблема

Я использую классический редактор и отключил блоки Гутенберга и глобальные стили.

Я создал пользовательский тип записи под названием “Ресурсы”, для которого я также создал архив 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", она должна возвращать объект термина, но, скорее всего, код неправильно обрабатывает объект, что приводит к ошибкам.

Применение

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

  1. Проверка настроек ACF: Убедитесь, что параметр "Return Value" для вашего пользовательского поля "res_type" установлен в соответствующее значение, например, "Object", чтобы вы могли извлекать необходимую информацию.

  2. Исправление кода для получения имени термина:
    Если вы возвращаете объект, используйте корректную обработку объекта термина. Например:

    $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 вы проверяете наличие самого объекта и данного свойства.

  3. Работа с идентификаторами: Если вы предпочитаете работу с идентификаторами терминов, вам нужно дополнительно извлечь объект термина с использованием функции 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>';
       }
    }

    Здесь важно не только получить термин, но и проверить ошибки и наличие объекта.

  4. Тестирование: После внесения изменений, протестируйте код в вашем шаблоне архива archive-resources.php, чтобы убедиться, что данные отображаются корректно.

  5. Отладка: Используйте error_log() или иные методы логирования, если данные все еще не отдаются. Это поможет понять, какие данные приходят от get_field(), и как они обрабатываются.

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

Оцените материал
Добавить комментарий

Капча загружается...