WordPress как на ладони
wordpress jino

Условные теги в WordPress

В этой статье я постараюсь доходчиво объяснить что такое «условные теги в WordPress» (Conditional Tags). В качестве справочника по всем условным тегам, используйте эту страницу.

Условные теги

Называются так, потому что проверяют выполняется ли кое-либо условие. На деле условные теги — это вспомогательные PHP функции WordPress, а называют их тегами, чтобы как-то выделить из числа прочих PHP функций. В большинстве своем, условные теги созданы для удобного выполнения проверок различных условий, например находимся ли мы на главной странице сайта.

Характеристики условных тегов в WordPress:

  • Каждый из тегов создан для проверки определенного условия. Грубо говоря любую функцию начинающуюся с is_ (is_*()) можно назвать условным тегом.

  • Некоторые условные теги могут принимать параметры: is_page(20) - проверяет ID текущей страницы. Если ID равен 20 то условие выполняется (тег срабатывает).

  • Любой условный тег возвращает логическое значение: true (правда) или false (ложь). На основе этого ответа можно делать или не делать что-либо.

С условными тегами очень тесно связана иерархия файлов темы. Для лучшего понимания ознакомьтесь со статьей по ссылке...

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

Предположим нам нужно вывести ссылку в подвале и сделать это нужно только на главной странице сайта. Для этих целей в WordPress есть условный тег is_front_page(), или его аналог is_home(). Эти функции вернут true, только в том случае, если страница на которой находится посетитель — это главная страница. В коде это выглядит так:

<?php
if( is_front_page() ){
	echo '<a href="http://site.ru">Текст ссылки</a>';
}
?>

Вместо HTML может быть PHP код, который будет выполнятся только на главной странице. Вместо is_front_page() может быть is_home(). Это похожие условные теги, разницу смотрите ниже.

Список Условных тегов WordPress

Самый полный список условных тегов смотрите по этой ссылке.

is_home() (основная страница)
Возвращает true, если это основная страница блога. Под основной понимается контент установленный для главной страницы, т.е. если установить в настройках (параметры > чтение) показ Постоянной страницы на главной странице, то этот тег будет работать только для этой установленной Постоянной страницы, а не для главной.
is_front_page()(главная страница)

Возвращает true, если вы на главной странице, независимо от того, что установлено в настройках. Страницы пагинации (/page/2 и т.д.) не учитываются.

is_front_page()

is_single() (Страница отдельной записи (поста))

Функция принимает параметры: ID записи, заголовок записи, ярлык записи или массив из любых этих параметров.

if( is_single() ){ ... }     // сработает для любого поста
if( is_single(10) ){ ... }   // сработает если это пост ID которого равен 10
if( is_single('Привет мир') ){ ... } // сработает если это пост с заголовком "привет мир"
if( is_single('privet_mir') ){ ... } // сработает если это пост со слагом "privet_mir"
// Вариант с массивом
if( is_single( array('10','Привет мир','new_post') ) ){ ... }
// сработает если это пост у которого ID равен 10, или заголовок "Привет мир", или слаг "new_post".
is_page() (страница Постоянной страницы)
Страница типа page. Функция принимает такие же параметры как и is_single(): ID страницы, Заголовок страницы, Слаг страницы или массив из любых этих параметров.
is_page_template() (шаблон страницы)

Если это страница шаблона для Постоянной страницы. Функция может принимать параметр название файла шаблона.

if ( is_page_template() ){ ... } // сработает на постоянной странице, для которой используется отдельный шаблон
if ( is_page_template('my_page.php') ){ ... } // сработает на постоянной странице, для которой используется отдельный шаблон с названием файла my_page.php
is_singular() (любая одиночная страница)
Любая одиночная страница, к ним относятся посты, постоянные страницы и созданные типы записей. Это короткая запись такой проверки: if( is_page() || is_single() ).
is_year() (архив за год)
Архив за год (site.ru/2010)
is_month() (архив за месяц)
Архив за месяц (site.ru/2010/06)
is_day() (архив за день)
Архив за день (site.ru/2010/06/02)
is_time() (архив по времени)
Архив по времени.
is_date() (страница любого типа даты)

Страница даты (общий условный тег). Это короткая запись такой проверки:

if( is_year() or is_month() or is_day() or s_time() )
is_author() (страница автора)

Страницы с выводом постов автора. Функция принимает параметры: ID автора, Имя автора и Ник автора. Так же, можно передать сразу несколько параметров в массиве. Пример записи:

if ( is_author() ) { ... }     // сработает для любых страниц автора
if ( is_author(10) ) { ... }   // сработает если отображается страница автора с ID равным 10
if ( is_author('Виктор') ) { ... } // сработает если отображается страница автора с именем "Виктор"
if ( is_author('Viktor') ) { ... } // сработает если отображается страница автора с Ником "Viktor"
// Вариант с массивом
if ( is_author( array('10','Виктор','Viktor') ) ) { ... }
// сработает если отображается страница  автора с ID 10, или Именем "Виктор", или Ником "Viktor".
is_archive() (любая страница архива)
Если это любая из страниц типа: категорий, меток, дат, авторов, таксономий (в WP 3.0). Общий условный тег.
is_post_type_archive() (страница архива типа записи)
Если это страница архива произвольного типа записей. Например, у нас есть тип записи knigi и при его регистрации мы указали, что у него есть страница архива, тогда её Url будет такой: site.ru/knigi. Этот условный тег будет срабатывать на такой странице.
is_paged() (страницы пагинации)
Если страницы пагинации (/page/2 или /page/3 и т.д.)
is_category() (страница категории)
Если страница категории.
cat_is_ancestor_of() (является ли одна рубрика дочерней к другой)
Проверяет, является ли одна рубрика дочерней к другой указанной (проверяются все уровни ветки).
is_tag() (страница метки)

Если страница метки. Функция может принимать параметры: Слаг(название) метки или массив из названий. Пример:

if ( is_tag() ) { ... }              // сработает для любых страниц меток/тегов
if ( is_tag('wordpress') ) { ... }    // сработает для страницы метки/тега Слаг (название), которого равен 'wordpress'
// вариант с массивом
if ( is_tag( array('wordpress','tag_name' ) ) { ... }   // сработает для страницы метки/тега Слаг (название), которого равен wordpress или tag_name
is_tax() (страница любой таксономии)

Если это страница любой таксономии (стандартно это страницы категорий или меток). может принимать два параметра, название таксономии и название элемента текущей таксономии:

if ( is_tax('category') ) { ... }                   // сработает, если в запросе открываемой страницы присутствует таксономия category. Тоже самое, что is_category()
if ( is_tax('category','category_slug') ) { ... }   // сработает, если это страница категории, слаг (ярлык) которой равно category_slug. Т.е. для конкретной категории.
// можно передавать массивы
if ( is_tax( array('category','post_tag') , array('tax_name1','tax_name2') ) ) { ... }
// сработает, если это страница категории или метки, название которой равно tax_name1 или tax_name2
is_search() (страница поиска)
Если страница результатов поиска.
is_404() (страница 404)
Если страница ошибки 404.
is_attachment() (страница вложения)
Если это отдельная страница прикрепленного файла (обычно картинки).
is_admin() (страница админки)
Если это страница админки блога.
is_user_logged_in() (пользователь авторизован)
Срабатывает если юзер залогинен.
current_user_can('право') (проверяет право пользователя)
Проверяет права пользователя, совершать то или иное действие. Право пользователя указывается в параметре функции. Полный список прав смотрите в кодексе. Например: if( current_user_can('manage_options') ){ ... } - это условие проверит, может ли текущий пользователь редактировать опции, обычно такое право есть у пользователя с правами Админимтратора.
have_posts() (есть записи для вывода)
Если текущий запрос ВП вернул данные для построения цикла loop, проще говоря, если есть посты на странице.

Редкие условные теги WordPress (используются редко или предназначены не для шаблонов)

is_sticky() (прилеплен ли пост)
Проверяет прилеплен ли пост. Принимает параметр ID поста. Прилепленные посты должны отображаться вначале цикла loop. Если ID поста не передан в эту функцию, то берется текущий ID из цикла Loop.
is_comment_feed()(страница фида комментариев)
Если страница RSS фида комментариев.
is_comments_popup()(всплывающее окно комментария)
Если это всплывающее окно комментария.
is_preview() (страница предпросмотра записи)
Если это страница предпросмотра поста или постоянной страницы.
is_trackback()
Если текущий запрос (query) - это запрос по трэкбекам.
is_feed() (страница фида записей)
Если страница RSS фида постов.

Условные теги и проверки предназначенные для отдельных страниц или постов

Ниже следующие проверки (условные теги) будут работать только на отдельных страницах, говоря языком этой статьи, если выполняются условия is_single(), is_page() или is_singular()

has_tag() (у поста есть метки)

Если у поста есть метки. Функция может принимать параметр название метки или массив с несколькими названиями меток. Пример:

if ( has_tag() ) { ... }           // сработает если у поста есть хотя бы одна метка
if ( has_tag('tag_name') ) { ... } // сработает если у поста есть метка с названием tag_name
// Вариант с массивом
if ( has_tag( array('tag_name','tag_name2') ) ) { ... }
// сработает если у поста есть метка с названием tag_name или tag_name2
in_category(10) (запись находится в категории 10)
Если запись находится в категории ID которой равен 10. Можно использовать внутри цикла Loop.
have_comments()(у поста есть комментарии)
Если у поста есть комментарии.
pings_open() (открыты уведомления)
Если пост принимает уведомления, т.е. открыты пинги.
$wp_query->query_vars[cpage](страница пагинации комментариев)
Если это страница пагинации комментариев. (/comment-page-1 /comment-page-2 и т.д.)
$post->post_excerpt(у поста есть "Цитата")
Если у поста есть "Цитата" (excerpt).
$post->post_parent == 20(ID родительской страницы равен 20)
Если ID родительской страницы равен 20. Работает только для постоянных страниц. Может также пригодится для вложений (файлы).
Условные теги в WordPress 44 комментария
Полезные 1 Все
  • Серега

    Привет!
    Как я могу только на одной странице скрыть header и footer?

    Ответить5 лет назад #
    • Владимир cайт: www.howtomake.com.ua

      Серега это можно сделать если создать произвольный тип записи

      Ответить4.8 года назад #
  • ws256 cайт: 256ws.ru

    В этой статье не хватает условия if (current_user_can('level_X'))

    Ответить3.9 года назад #
    • Kama4697

      Уровни были отменены в версии 2.0. Поддерживаются для обратной совместимости, но крайне не рекомендуется их использовать.

      Что касается условного тега current_user_can(), добавил его в статью.

      Спасибо!

      Ответить3.9 года назад #
      • ws256 cайт: 256ws.ru

        У меня в шаблоне например формируется сложное меню пользователя в зависимости от роли, модератор, супермодератор, админ, или обычный участник. Аналог Login With Ajax с расширенными возможностями так сказать. Если уберут уровни, тогда что делать? Сейчас у меня все просто:

        <?php if (current_user_can('level_7') || (function_exists('is_moderator') && is_moderator())){ ?>
        Ответить3.9 года назад #
        • Kama4697

          Их уже убрали, как я и написал, смотрите в кодексе :
          3.0: User Levels system deprecated & Multisite Super Admins introduced. (уровни уровни пользователей были запрещены).

          Вам нужно просто заменить current_user_can('level_7') на право, которое соответствует этому уровню. Например: level_7 относится к Editor (редактор). Права Редактора, смотрим:
          delete_others_pages
          delete_others_posts
          delete_pages
          ...

          Получается, можно заменить на это: current_user_can('delete_pages') или current_user_can('delete_others_pages') и т.д. По идее можно даже написать так current_user_can('editor'), но разработчики так не рекомендуют делать, потому что в некоторых случаях может не работать.

          Ответить3.9 года назад #
  • Юрий cайт: allworldcar.ru @

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

    Ответить3.3 года назад #
  • Otshelnik-fm185 cайт: otshelnik-fm.ru

    cat_is_ancestor_of() http://wp-kama.ru/function/cat_is_ancestor_of ее надо тоже сюда добавить

    Ответить2.6 года назад #
  • Дамир cайт: gabdrahimov.ru

    Добрый день, в записи:

    Это короткая запись такой проверки: if( is_page() or is_post() )

    может имеется в виду тег is_single()?
    а то что-то я не нашел ничего про тег is_post()

    1
    Ответить2.5 года назад #
  • Роман

    Здравствуйте.

    Нужен примерно такой код

    if ( is_tax('category') ) { ... }                   // сработает, если в запросе открываемой страницы присутствует таксономия category. Тоже самое, что is_category()

    но не для страниц, а для записей. Помогите, пожалуйста.

    Ответить2.3 года назад #
  • Дамир

    Привет, нужно чтобы виджет отображался в записях у которых имеется метка "имя_метки", это можно реализовать с помощью условных тегов?

    Ответить1.8 года назад #
    • Дамир

      спс нашел на твоем сайте has_tag()
      сайт у тебя шакарный, выпусти локальный справочник wordpress smile который можно скачать
      иза-него него трафик еще больше повысится

      Ответить1.8 года назад #
  • Кирилл cайт: mindhalls.ru @

    Привет! Меня интересует вот такой вопросик. Почему это называется условными тегами, если это функции на php?

    Ответитьгод назад #
    • Kama4697

      Точно не знаю, чтобы как-то выделить. «Условные» потому что всегда проверяют какое-то условие. «Теги» потому что часто используются в шаблоне, может в англ. слово tag какое-то еще смысловое значение несет, не знаю. Это типа ветка функций которые можно так вот выделить в группу и потом просто говорить, - используй условные теги... В ВП еще есть понятие Template Tags (теги шаблона) - тоже php функции, которые часто юзаются в шаблоне.

      2
      Ответитьгод назад #

Здравствуйте, !

Ваш комментарий