has_term ничего не возвращает

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

У меня есть запрашиваемый список событий в календаре, и я пытаюсь проверить, есть ли у них настройки пользовательской таксономии. В цикле у меня есть список операторов “if” для вывода терминов из таксономии параметров доступности для каждого случая, вот так:

if ( has_term('closed-captions', 'accessibility-options') ) { echo 'CC'; }

Ничто из этого не работает. Однако, когда я делаю это:

$access_options = get_the_term_list( $post->ID, 'accessibility-options', '', ', ', ' ' );
echo $access_options

Он выводит ожидаемые термины. Я проверил так, что вставил точный ID поста в оператор has_term и получил ожидаемые результаты. Но он не работает как есть или когда я использую $post->ID в параметрах.

Я пытался вывести ID поста, чтобы это проверить, и когда я это делаю, я не получаю фактический ID поста. Например, если я ожидаю, что ID поста будет 48445, я вместо этого получаю 10000854.

Буду признателен за любые идеи!

Если ваш второй блок кода находится в том же блоке, что и первый, то добавление $post->ID в качестве третьего параметра вызова has_term() должно исправить это:

if ( has_term( 'closed-captions', 'accessibility-options', $post->ID ) ) { echo 'CC'; }

Если это не поможет, как упомянул Том, пожалуйста, обновите ваш вопрос, чтобы включить окружающий релевантный код.

Ответ или решение

Конечно! Ваша проблема с использованием функции has_term заключается в том, что она проверяет на наличие термина (в вашем случае — ‘closed-captions’ для таксономии ‘accessibility-options’) для текущего поста в глобальной переменной $post. Если вы не установили правильный контекст поста в своем цикле, функция может не возвращать ожидаемый результат.

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

if ( has_term( 'closed-captions', 'accessibility-options', get_the_ID() ) ) {
    echo 'CC';
}

Однако, если вы получаете неправильный ID поста, как вы указали (например, 10000854 вместо 48445), это может означать, что вы работаете с неправильной глобальной переменной $post. Убедитесь, что перед проверкой поста ваш контекст и цикл верны.

Если вы используете функцию get_the_term_list и она работает, то это указывает на то, что у вас все еще может быть корректный идентификатор поста. Чтобы устранить путаницу с идентификатором, вы можете явно задать идентификатор поста, используя переменную, если она у вас доступна, например:

$post_id = $post->ID; // или любой другой способ получения ID конкретного поста
if ( has_term( 'closed-captions', 'accessibility-options', $post_id ) ) {
    echo 'CC';
}

Если после этих изменений has_term все еще не возвращает ожидаемый результат, проверьте следующее:

  1. Убедитесь, что выбранный вами идентификатор поста действительно указывает на пост, к которому вы хотите применить проверку.
  2. Убедитесь, что в базе данных есть соответствующий термин для данного поста в таксономии ‘accessibility-options’.
  3. Если вы работаете с пользовательскими типами записей, удостоверьтесь, что термины были правильно назначены вашему типу записи.

Кроме того, если у вас есть дополнительные блоки кода, которые могли бы помочь в диагностике — например, как вы выводите посты или где именно выполняется проверка has_term, не стесняйтесь делиться ими. Это поможет в более точном определении источника проблемы.

Если у вас останутся вопросы или понадобится дополнительная помощь, не стесняйтесь спрашивать!

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

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