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

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

  2. JAH

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

  3. Евгений

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

  4. Евгений

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

    
    .ratingblock {display:none}
    
    

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

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

    
    

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

  5. Евгений

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

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

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

    !in_category('3,8') &amp;&amp; $_SERVER['REQUEST_URI'] == '/home/category/news/'): 
  6. 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; ?>

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

  7. Кгіщт

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

    текст1

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

    текст 1

    текст2

    не сработало

    Спасибо!

  8. JAH

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

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

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

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

    и тд.

  9. Андрей

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

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

  10. JAH

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

  11. Андрей

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

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

  12. Юрий

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

  13. Ян

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