Вопрос или проблема
У меня есть property
как пользовательский тип записи. Я хочу отображать определенное сообщение, если свойство находится в категории sold
. Для этого я использую следующую функцию:
if ( has_term('sold', 'category')) {
?>
<div class="sold_prop_note">
<h3>Это имущество продано. Посмотрите наши текущие эксклюзивы! <a href="https://wordpress.stackexchange.com/properties">Посмотреть эксклюзивы</a></h3>
</div>
<?
}
До использования вышеприведенного, я также пробовал in_category, как в примере ниже:
if ( in_category( array( 'sold', 'homepage-sold' ) )) {
?>
<div class="sold_prop_note">
<h3>Это имущество продано. Посмотрите наши текущие эксклюзивы! <a href="https://wordpress.stackexchange.com/properties">Посмотреть эксклюзивы</a></h3>
</div>
<?
}
Оба не сработали. Чтобы добавить пользовательский тип записи, таксономии были с 'taxonomies' => array( 'category', 'post_tag' )
.
Оба используются внутри цикла (с помощью шорткода). Я что-то упускаю?
has_term() требует третий параметр, чтобы указать, у какого типа записи есть этот термин. Таким образом, ваш код будет:
if ( has_term('sold', 'category', 'property')) {
?>
<div class="sold_prop_note">
<h3>Это имущество продано. Посмотрите наши текущие эксклюзивы! <a href="https://wordpress.stackexchange.com/properties">Посмотреть эксклюзивы</a></h3>
</div>
<?php
}
Кроме этого подхода, вы можете использовать следующий:
global $post;
if ( ( $post->post_type == 'property' )
&& has_term( 'sold', 'category' )
) { ?>
<div class="sold_prop_note">
<h3>Это имущество продано. Посмотрите наши текущие эксклюзивы! <a href="https://wordpress.stackexchange.com/properties">Посмотреть эксклюзивы</a></h3>
</div>
<?php }
Ответ или решение
Конечно, давайте разберем, как правильно использовать функции has_term
и in_category
для работы с пользовательскими типами записей в WordPress на примере применения к кастомному типу записи property
.
Анализ Проблемы
Вы хотите отобразить определенное сообщение, если свойство относится к категории sold
. Для этого вы пытались использовать функции has_term
и in_category
, но они не сработали. Причиной может быть то, что обе функции используются неправильно для кастомных типов записей.
Решение
Использование has_term
Функция has_term
на самом деле может работать с пользовательскими типами записей, но нужно правильно задавать параметры:
-
Третий параметр: указывая ID записи (или же передавая его в качестве глобального объекта
$post
). -
Правильное использование внутри цикла: Убедитесь, что ваш код выполняется внутри петли с корректным контекстом поста.
Пример корректного использования:
if ( has_term('sold', 'category', get_the_ID()) ) {
?>
<div class="sold_prop_note">
<h3>Это свойство продано. Ознакомьтесь с нашими текущими эксклюзивами! <a href="https://wordpress.stackexchange.com/properties">Посмотреть Эксклюзивы</a></h3>
</div>
<?php
}
Альтернативный подход
Вы можете применить дополнительную проверку по типу записи:
global $post;
if ( ($post->post_type == 'property') && has_term('sold', 'category', $post->ID) ) {
?>
<div class="sold_prop_note">
<h3>Это свойство продано. Ознакомьтесь с нашими текущими эксклюзивами! <a href="https://wordpress.stackexchange.com/properties">Посмотреть Эксклюзивы</a></h3>
</div>
<?php
}
Этот подход гарантирует, что условие будет выполнено только для записей типа property
, находящихся в нужной категории.
Заключение
Убедитесь, что ваш код выполняется внутри основного цикла WordPress, и убедитесь, что используются правильные параметры для функций. Проверка типа поста может дополнительно обезопасить ваше решение от ошибок. Такой подход позволит вам гибко и надежно контролировать логику отображения сообщений для кастомных типов записей.
Используя предоставленные рекомендации, вы сможете исправить ошибки и добиться необходимого результата.