Представим, что Вы выводите записи и нужно изменить внешний вид в зависимости от рубрики. Например, у Вас есть блок "ОБ АВТОРЕ" который выводит информацию об авторе статьи, но вы не хотите видеть этот блок например под записями из рубрики в которой это не нужно. Так же можно отключать комментирование в определенных рубриках, вывод миниатюр и тд. Все зависит от Ваших нужд и фантазий. Лично я очень часто пользуюсь таким условием.
Чтобы отфильтровать записи в зависимости от рубрики поможет функция - 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.
Если Вам нужно указать несколько рубрик, то укажите их через запятую. Так же Вам может быть нужно создать условие "ЕСЛИ - ТО", тогда код будет примерно таким:
<?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; }
Если все сделано правильно, то ваше условие будет отбирать записи по определенным рубрикам и их подрубрикам.
Давненько начал писать данную статью, да все руки не доходили закончить, то одно, то второе перебивало. Наконец-то статья окончена и возможно многим поможет решить вопрос.
На этом все, спасибо за внимание. 🙂