Вопрос или проблема
У меня есть запрашиваемый список событий в календаре, и я пытаюсь проверить, есть ли у них настройки пользовательской таксономии. В цикле у меня есть список операторов “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
все еще не возвращает ожидаемый результат, проверьте следующее:
- Убедитесь, что выбранный вами идентификатор поста действительно указывает на пост, к которому вы хотите применить проверку.
- Убедитесь, что в базе данных есть соответствующий термин для данного поста в таксономии ‘accessibility-options’.
- Если вы работаете с пользовательскими типами записей, удостоверьтесь, что термины были правильно назначены вашему типу записи.
Кроме того, если у вас есть дополнительные блоки кода, которые могли бы помочь в диагностике — например, как вы выводите посты или где именно выполняется проверка has_term
, не стесняйтесь делиться ими. Это поможет в более точном определении источника проблемы.
Если у вас останутся вопросы или понадобится дополнительная помощь, не стесняйтесь спрашивать!