has_term или in_category для пользовательских типов записей

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

У меня есть 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 на самом деле может работать с пользовательскими типами записей, но нужно правильно задавать параметры:

  1. Третий параметр: указывая ID записи (или же передавая его в качестве глобального объекта $post).

  2. Правильное использование внутри цикла: Убедитесь, что ваш код выполняется внутри петли с корректным контекстом поста.

Пример корректного использования:

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, и убедитесь, что используются правильные параметры для функций. Проверка типа поста может дополнительно обезопасить ваше решение от ошибок. Такой подход позволит вам гибко и надежно контролировать логику отображения сообщений для кастомных типов записей.

Используя предоставленные рекомендации, вы сможете исправить ошибки и добиться необходимого результата.

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

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