in_category() — функция, позволяющая проверить, принадлежит ли пост к указанным категориям

Функция возвращает логическое true, если пост принадлежит одной из указанных рубрик, в обратном случае — false. Родительские рубрики не учитываются.

Использование

in_category( $category, $post )

Параметры

$category
(целое|строка|массив) (обязательное) одна или несколько (через массив) категорий, перечисленных по ID, имени или ярлыку,

$post
(целое|объект) (необязательно) ID или объект поста, по умолчанию — текущий пост в цикле

Примеры использования

Проверяем, принадлежит ли пост с указанным ID к рубрикам «WordPress» или «HTML»:

if ( in_category( array('WordPress', 'HTML'), 5 )) {
	// действия в случае, если принадлежит категориям
}

То же самое условие, только с использованием в качестве параметров ID рубрик:

if ( in_category( array(15, 4), 5 )) {
	// WordPress с ID = 15, HTML с ID = 4
}

Обратное условие:

if ( !in_category( array('WordPress', 'HTML'), 5 )) {
	// действия в случае, если НЕ принадлежит категориям
}

Параметр $post можно не указывать в цикле, а также в файле single.php — автоматически будет определен текущий пост.

if ( in_category( 'wordpress') ) {
	// в качестве параметра указан ярлык рубрики
}

Для того, чтобы проверить, принадлежит ли пост нескольким конкретным категориям одновременно, используйте следующее условие:

if ( in_category(4) && in_category('wordpress') && in_category('css') ) {
	// находится во всех трех рубриках
}

Короче говоря условие будет выполняться, если:

пост находится в категориях CSS, HTML и WordPress

Комментарии 10

  • Артем19 октября 2013 в 15:10 #

    Помогите решить проблему, использую код (что бы во всех рубриках, кроме рубрик с id 538 190 300 выводилась , например, точка, как в этом случае)

    <?php if (in_category('538, 190, 300')) : ?>
    <p>.</p>
    <?php } ?>

    Но выдает или ошибку или ничего не происходит. Подскажите, пожалуйста, правильно ли сам код написан.

    • Миша19 октября 2013 в 15:10 #

      ошибка возникает из-за неправильного построения конструкции if и неправильной передачи аргумента, можете использовать один из следующих вариантов:

      <?php if( !in_category( array(538, 190, 300) ) ) : ?>
      <p>.</p>
      <?php endif; ?>

      или

      <?php if( !in_category( array(538, 190, 300) ) ) { ?>
      <p>.</p>
      <?php } ?>
  • Артем19 октября 2013 в 15:10 #

    Использовал второй вариант - помогло. Спасибо большое!

  • Мария4 февраля 2015 в 21:02 #

    Как быть если in_category срабатывает на главной

     if ( in_category( array(15, 4), 5 ))

    которые не имеют отношение к главной странице

    • Миша5 февраля 2015 в 07:02 #

      Рекомендую удалить второй аргумент «5».

      • Мария5 февраля 2015 в 12:02 #

        Проблема не в именно этом коде, на главной странице получается срабатывает is_home - с этим проблем нет, и in_category первой новости которая выводится на странице.

        • Миша6 февраля 2015 в 08:02 #

          Да, если in_category() задействована внутри цикла и не имеет второго аргумента. Какая собственно ставится задача?

  • Мария10 февраля 2015 в 15:02 #

    Если к примеру пользователь находится на странице категории то появлялись под категории соответствующие данной категории.

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.