X
  • Дизайн та розробка сайту
  • Дизайн і створення сайтів. Розробка тем для WordPress. Створення Landing Page.
  • office@gnatkovsky.com.ua
  • @vgnat
  • Написати мені
Замовити послугу

Проверка на принадлежность записи к определенной рубрике в WordPress с помощью функции in_category()

Приклад
  • 2024-11-21
  • 6511 переглядів

  • Дизайн та розробка сайту

Доброго времени суток 🙂

Сегодня разложим по полочкам одну из популярных функций WordPress. Если Вы вплотную занимаетесь своим сайтом на WP, можете столкнутся с потребностью отфильтровать те или иные записи по определенным рубрикам. Сейчас попробую по-подробнее объяснить задумку.

Проверка на принадлежность записи к определенной рубрике

Представим, что Вы выводите записи и нужно изменить внешний вид в зависимости от рубрики. Например, у Вас есть блок "ОБ АВТОРЕ" который выводит информацию об авторе статьи, но вы не хотите видеть этот блок например под записями из рубрики в которой это не нужно. Так же можно отключать комментирование в определенных рубриках, вывод миниатюр и тд. Все зависит от Ваших нужд и фантазий. Лично я очень часто пользуюсь таким условием.

Чтобы отфильтровать записи в зависимости от рубрики поможет функция - in_category(). Данная функция делает проверку на то принадлежит ли текущая или заданная запись к нужной рубрике, ну или нескольким рубрикам. Чаще всего данная функция выводится в файле single.php, потому как он и отвечает за вывод записей.

Простейший способ использования функции, будет выглядеть примерно следующим образом. Добавляем данный код в файл single.php, при необходимости заключаем в PHP теги.

PHP теги выглядят так:

<?php 
// тут код
 ?>

Если у Вас в теме используется в основном HTML код, то вставляйте код приведенный ниже без изменений. Если используется в основном PHP, то теги в которые заключен код можно удалить.

<?php 
if ( in_category( 12 )) {
//Сюда пишем то что будет выводится, если запись из рубрики с айди 12
//Пишем PHP код
}
 ?>

В данном коде мы задали условие, что если текущая запись принадлежит к рубрике с ID - 12, то нужно что-то вывести. То что хотите, добавляете внутрь фигурных скобок. Это должен быть PHP код, если это сложно и нужно добавить HTML код, то разорвите код теми же PHP тегами и код станет таким:

<?php if ( in_category( 'blog' )) { ?>
//сюда пишем обычный HTML код или просто текст.
<?php } ?>

Чтобы определить айди рубрик, нужно в админке перейти в список рубрик и навести курсором на нужную. Внизу окна браузера с правой стороны появится ссылка внутри которой будет что-то типа ID=1, то есть айди этой рубрики 1.
ID рубрики

Если Вам нужно указать несколько рубрик, то укажите их через запятую. Так же Вам может быть нужно создать условие "ЕСЛИ - ТО", тогда код будет примерно таким:

<?php 
if ( in_category( 12 )) {
//То что выводится если рубрика 12
} else {
//То что выводится в остальных рубриках
} ?>

Представьте, что Вам нужно выводить в рубрике 12 миниатюру записи, а в остальных записях из других рубрик - первую картинку из текста. Такое бывает и как это сделать? С помощью приведенного кода Выше. Про вывод первого изображения из записи можно прочитать в статье - Первая картинка из записи вместо миниатюры WordPress без плагина

Теперь хочу показать еще одну возможность, которую можно добавить к данной функции. Так бывает что у рубрик есть подрубрики, то есть дочерние категории. И если запись принадлежит к одной из подрубрик, то условие обойдет ее. Если Вам это и нужно, то можете ничего не трогать, но вот если, все же условие должно работать и на подрубрики, то нужно добавить к условию дополнение. Для начала в само условие нужно добавить такую часть - || post_is_in_descendant_category( 12 ). Это вызов нашей новой функции, которая будет осуществлять проверку по подрубрикам. Готовый код станет таким:

Чтобы новая функция начала работать, нужно добавить сам код этой функции, то есть ее нужно написать. Для этого, найдите в папке с активной темой файл function.php, в котором находятся пользовательские функции. Добавлять код, если вы не знакомы с PHP, нужно в самый конец файла, но если там есть закрывающий PHP тег - ?>, то добавлять нужно перед ним. Сам код выглядит так:

function post_is_in_descendant_category( $cats, $_post = null )
{
	foreach ( (array) $cats as $cat ) {
		// get_term_children() accepts integer ID only
		$descendants = get_term_children( (int) $cat, 'category');
		if ( $descendants && in_category( $descendants, $_post ) )
			return true;
	}
	return false;
}

Если все сделано правильно, то ваше условие будет отбирать записи по определенным рубрикам и их подрубрикам.

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

На этом все, спасибо за внимание. 🙂

Якщо Вам була корисна моя праця, можете фінансово підтримати сайт або відключити блокувальник реклами, що займе 2 хвилини :)

Хочу підтримати фінансово Хочу відключити блокувальник

Оцініть статтю
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
Проголосовало: 8, в среднем: 5 из 5
Читайте також

Deprecated: Функція WP_Query викликана з аргументом, який вважається застарілим з версії 3.1.0! Вираз caller_get_posts застарілий. Використовуйте ignore_sticky_posts. in /var/www/vhosts/gnatkovsky.com.ua/gnatkovsky.com.ua/public/wp-includes/functions.php on line 6078