Полноценно используем условие if

Довольно распространенный ступор при разработке темы для WordPress, как пользоваться конструктором условий if else, как правильно их задать и как их вообще использовать в WordPress. Чтобы миллионы пользователей не сходили с ума в поисках решений, WordPress, так сказать, создал условные теги о использовании которых сегодня пойдет речь.

Стандартная конструкция условия выглядит следующим образом:

<?php if(условие) :
echo 'good';
else :
echo 'bad';
endif; ?>

С одной стороны все понятно, а с другой стоит вопрос как правильно сформулировать условие, чтобы WordPress понял, то чего мы от него хотим 🙂 поехали:

1. Главная страница

Часто хотим, чтобы определенная информация выводилась только на главной странице. Для решения можно создать в папке Вашей темы файл home.php или в файл index.php внести следующее условие:

<?php if(is_home()) { ?>
<div>
....Здесь выводим информацию,
которую мы хотим видеть на главной странице
</div>
<?php } ?>

2. Проверяем рубрики

Зададим такое условие: Если мы находимся в рубрике WordPress, то выведем фразу «Вас приветствует, WordPress!», а если нет то фразу «Добро пожаловать, на наш сайт!»

<?php if(is_category('id')) :
echo "Вас приветствует, WordPress!";
else :
echo "Добро пожаловать, на наш сайт!";
endif;
?>

/*Можно и такой схемой*/
<?php if(is_category('id')) { ?>
<p>"Вас приветствует, WordPress!"</p>
<?php } else { ?>
<p>Добро пожаловать, на наш сайт!"</p>
<?php } ?>

Здесь и дальше в качестве идентификатора рубрики(метки) или записи(страницы) я буду использовать id — его можно узнать в панели управления сайтом. Если Вы пишете условия для рубрик(меток) то смотрите id на странице рубрик(меток), а если записей(страниц) — то на странице всех записей(страниц)… паника). Как все-таки узнать?, — смотрите иллюстрацию:

Полноценно используем условие if

Идем далее по условиям связанных с рубриками и зададим следующее: «Если запись находится в рубрике WordPress, то вывести слова — Статья из рубрики WordPress»:

<?php if(in_category('id')) :
echo 'Статья из рубрики WordPress';
endif; ?>

И еще такой финт 🙂 допустим нам нужно условие для проверки нескольких рубрик, тогда условия будут иметь вид:

<?php if(is_category(array(1,2,34,48)) or in_category(array(1,2,33,50))) : ?>
<p>выведем то, что нам нужно</p>
<?php endif; ?>

3. Проверяем метки

Метки — крутой классификатор внутри рубрик. Рассмотри несколько примеров, как их можно проверить.

Задача: Если запись имеет метку "plugin", то вывести фразу — WordPress Plugin

Решение:

<?php if(has_tag('plugin')) :
echo 'WordPress Plugin';
endif; ?>

Задача: Если находимся на странице метки "plugin", то вывести фразу — Коллекция плагинов WordPress.

Решение:

<?php if(is_tag('plugin')) :
echo 'WordPress Plugin';
endif; ?>

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

Заключение

Я рассмотрел основные условные теги, если у Вас есть какие-то вопросы задавайте их в комментариях! Удачного использования!

Добавить комментарий:

Комментарии
  1. JAH:

    Александр,

    Выводим во всех рубриках, кроме: 4,6

    <?php if ( ! is_category( array( 4, 6 ) ) ) { ?>
         <p>Тут что-то можно вывести что не выводится на шаблоне категорий с id = 4 || 6</p>
    <?php } ?>
    

    выводим в рубриках с id: со 2-ой по 13-ю

    Тут конечно костыль.. рабочий)

    <?php
    //  Указываем стартовый id
    $cat_id_start = 210;
    //  Указываем конечный id
    $cat_id_end = 315;
    //  Объявляем пустой array
    $cat_arr = [];
    
    //  Наполняем $cat_arr id'шками категорий
    for( $i = $cat_id_start; $i <= $cat_id_end; $i++ ) {
        $cat_arr[] = $i;
    }
    
    if( is_category( $cat_arr ) ) { ?>
        <p>Выводим то что попадает в диапазон id'шек категории</p>
    <?php } ?>
    

    Напомню что is_category() можно использовать практически в любом template темы, а in_category() только на шаблоне поста

  2. JAH:

    Анастасия, спасибо поправил

  3. Александр:

    Благодарю за статью. А как сделать, чтобы проверка шла так:

    Выводим во всех рубриках, кроме: 4,6

    И еще так: выводим в рубриках с id: со 2-ой по 13-ю

  4. JAH:

    Олег, попробуйте Yoast Seo в нем есть способы мигрирования с All in One Seo Pack + можно для статей, категорий, меток, таксономий указать произвольный title и описания

  5. Анастасия:

    Добрый день, пропустили } в =

  6. Олег:

    Доброго времени! Подскажи пожалуйста, мне нужно поменять титл рубрики на свой текст. у меня стоит all in one seo. я пробовал в хедер вставлять код

    но эффекта никакого. мне нужно всего лишь титл 1 рубрики заменить, то что остальные будут генериться из названия меня устраивает. Хелп!

  7. JAH:

    Анна, Вы используете WP или просто сверстать? если WP то Вам нужен шорткод для статьи с опросом, для этого лучше использовать произвольные поля (например ACF) и ajax обработчик формы (написать функцию в файле functions.php которая будет сравнивать правильный ответ и выбор[или ввод] пользователя), а проверить на заполненость или выбор нужно конечно на стороне пользователя ну и на back’е тоже

  8. Анна:

    Здравствуйте! у меня такая задача: есть много записей, в которых сначала выводится текст либо картинка, а ниже задается один-несколько вопросов. Пользователь вводит ответ в инпут. Для каждой записи разные правильные ответы. Как лучше сделать проверку ответов на каждой странице? На другом движке после inputa была конструкция if-else javascript.
    Помогите, пожалуйста!

  9. Ян:

    Добрый день, а как задать условие для страницы, которая выводит произвольные типы записей? Перерыл весь интернет, но ничего пока не нашёл. Может, Владимир, вы подскажете?

  10. Юрий:

    Спасибо ! Одна из лучших статей ,что я встречал. Очень доходчиво. Жаль ,что больше нет таких статей. Если возможно статью бы как делать add_filters

  11. Андрей:

    JAH, я еще специально проверил эту конструкцию на WPшном сайта, думаю, может нововведения какие))

    PS Жаль нет возможности прямого ответа на коммент, а дизайн интересный, адаптация хорошо сделана (:

  12. JAH:

    Андрей, )) видать перестарался, если б не написал так бы и висело и никто бы внимания не обращал а так поправил, спасибо)

  13. Андрей:

    День добрый! У вас стоит такая конструкция:

    Где это видано, чтобы после echo ставили двоеточие?.. Перестарались?)

  14. JAH:

    Кгіщт, вот так:

    <?php if(is_home()){ ?>
    тут текст для главной
    <?php } else { ?>
    тут текст для остальных страниц
    <?php } ?>
    

    можно несколько условий

    <?php if(is_home() && is_page()){ ?>
    

    и тд.

  15. Добрый день, а как прописать условие чтобы на домащней странице выводилось «текст 1» а на всех остальных «текст2» если прописываю

    текст1

    то получается, что домашней выводится и текст1 и текст2 тот который в основном шаблоне
    пробовал так

    текст 1

    текст2

    не сработало

    Спасибо!

  16. JAH:

    Евгений,

    in_category() — это для шаблона записи (single.php — тоесть принадлежит или не принадлежит запись заданным рубрикам)

    is_category() — для шаблона рубрик(category.php — тоесть определяем какая рубрика сечас отображается)

    и вот так !in_category(‘3,8’) — неправильно писать
    нужно так

    <?php if(!in_category(array(3,8)) or $_SERVER['REQUEST_URI'] == '/home/category/news/') : ?>
    <style type="text/css">
    .ratingblock {display:none}
    </style>
    <?php endif; ?>

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

  17. Евгений:

    Что то код отформатировался, дублирую
    Использую такой код

    if ( !in_category('3,8')):
    
    .ratingblock {display:none}
    
    php endif;

    а вот так не работает

    !in_category('3,8') &amp;&amp; $_SERVER['REQUEST_URI'] == '/home/category/news/'): 
  18. Евгений:

    Использую такой код

    
    .ratingblock {display:none}
    
    

    что бы скрыть блок на определённых страницах,
    хочу добавить условие: если урл http://money-tor.com/home/category/news/, то тоже display:none

    но почему то не работает,

    
    

    Наверное что то не правильно?

  19. Спасибо. Очень помогло. На одном автомобильном сайте нужно было вывести сообщения везде где была метка «карбюраторный» и has_tag сработал. Лучшее что есть на первой странице гугла по этой теме.

  20. JAH:

    Алекесандр, это можно сделать с помощью jQuery а не PHP

  21. Алекесандр:

    Здравствуйте! Подскажите как мне проверить условие при наступлении события после чего вывести сообщение о наступлении события и скрыть часть данных в посте?