В WordPress есть целое семейство функций — is_xxx(), возвращающих информацию о том, что именно запросил пользователь.
С этими всеми функциями есть одна проблема — они отвратительно документированы. Как следствие, с неоднозначностью возвращаемых результатов приходится разбираться самостоятельно.
Вся магия, связанная с определением типа запроса, находится в файле wp-includes/query.php (сама логика разбора реализована в методе WP_Query::parse_query()).
Условно все переменные, передаваемые в запросе, можно разделить на семь групп, первые шесть из которых являются взаимоисключающими (в них приоритет отдаётся параметрам из группы с меньшим номером):
- 404 — страница не найдена. Обращаю внимание, что
404.phpвызывается только в том случае, если условия поиска являются однозначными и при любом наборе данных соответствуют лишь либо одной, либо ни одной записи. - Вложения (параметры
attachment,attachment_id,subpostиsubpost_id). А Вы знаете, что WordPress позволяет оставлять комментарии даже к вложениям? Если нет, то попробуйте: ссылка 1 и ссылка 2. - Записи (параметры
nameиp; а также, если установлены все шесть параметровyear,monthnum,day,hour,minuteиsecond); - Страницы (параметры
static,pagenameиpage_id) - Поиск (параметр
s) - Архив — всё, что связано с таксономией, авторами, датой и временем (в эту группу относятся параметры
second,minute,hour,day,monthnum,year,m,w,cat,category_name,category__in,category__not_in,category__and,tag,tag_id,tag__in,tag__not_in,tag__and,tag_slug__in,tag_slug__and, параtaxonomyиterm,author,author_name); - Прочие параметры, играющие роль модификаторов (
preview,comments_popup,pagedи т.п.)
Поясню про приоритеты. Например, если пользователь ввёл http://blog.sjinks.org.ua/?p=336&category_name=CSS (статья с ID 336 не относится к категории CSS), WordPress будет искать только статью и полностью проигнорирует категорию.
Ниже приведена таблица, указывающая, какая функция из семейства is_xxx() вернёт значение true для разных категорий запросов. Как я уже говорил, первые шесть категорий являются взаимоисключающими (исключение: для первых трёх категорий функция is_singular() вернёт true).
Отдельно указаны Home Page и Front Page — они не относятся к категориям запросов как к таковым, но значения, возвращаемые функциями get_xxx(), знать полезно.
| Attachment | Post | Page | Search | 404 | Archive | Misc | Home Page | Front Page | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Year | Month | Day | Week | Hour/Min/Sec | Category | Tag | Taxonomy | Author | Paged | Comments Popup | Preview | ||||||||
| is_404 | - | - | - | - | + | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| is_archive | - | - | - | - | - | + | + | + | + | + | + | + | ? | + | ? | ? | ? | - | - |
| is_attachment | + | - | - | - | - | - | - | - | - | - | - | - | - | - | ? | ? | ? | - | - |
| is_author | - | - | - | - | - | ? | ? | ? | ? | ? | ? | ? | ? | + | ? | ? | ? | - | - |
| is_category | - | - | - | - | - | ? | ? | ? | ? | ? | + | ? | ? | ? | ? | ? | ? | - | - |
| is_tag | - | - | - | - | - | ? | ? | ? | ? | ? | ? | + | ? | ? | ? | ? | ? | - | - |
| is_tax | - | - | - | - | - | ? | ? | ? | ? | ? | ? | ? | + | ? | ? | ? | ? | ? | - |
| is_date | - | - | - | - | - | + | + | + | + | + | ? | ? | ? | ? | ? | ? | ? | - | - |
| is_day | - | - | - | - | - | - | - | + | - | - | ? | ? | ? | ? | ? | ? | ? | - | - |
| is_month | - | - | - | - | - | - | + | - | - | - | ? | ? | ? | ? | ? | ? | ? | - | - |
| is_year | - | - | - | - | - | + | - | - | - | - | ? | ? | ? | ? | ? | ? | ? | - | - |
| is_time | - | - | - | - | - | - | - | - | - | + | ? | ? | ? | ? | ? | ? | ? | - | - |
| is_page | - | - | + | - | - | - | - | - | - | - | - | - | - | - | ? | ? | ? | - | ? |
| is_single | + | + | - | - | - | - | - | - | - | - | - | - | - | - | ? | ? | ? | - | - |
| is_singlular | + | + | + | - | - | - | - | - | - | - | - | - | - | - | ? | ? | ? | - | ? |
| is_search | - | - | - | + | - | - | - | - | - | - | - | - | - | - | ? | ? | ? | - | - |
| is_paged | ? | ? | ? | ? | - | ? | ? | ? | ? | ? | ? | ? | ? | ? | + | ? | ? | - | - |
| is_preview | ? | ? | ? | ? | - | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | + | - | - |
| is_comments_popup | ? | ? | ? | ? | - | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | + | ? | - | - |
| is_home_page | - | - | - | - | - | - | - | - | - | - | - | - | ? | - | ? | ? | ? | + | - |
| is_front_page | - | - | - | - | - | - | - | - | - | - | - | - | - | - | ? | ? | ? | ? | + |
Легенда: если в ячейке стоит плюс (минус), то функция is_xxx() (определяется строкой) вернёт true (false) для категории запроса, определяемого столбцом. Если в ячейке стоит знак вопроса, то результат может быть любым (в том плане, что категория запроса не является определяющей).
Порядок применения шаблонов в спорных случаях
В случае "сложных" запросов может возникнуть ситуация, когда результат соответствует более, чем одному шаблону. Например, для вышеприведёноой ссылки результат соответствует следующим шаблонам:
taxonomy.php(is_tax()возвращаетtrue);category.php(is_category()возвращаетtrue);archive.php (is_archive()возвращаетtrue);index.php(в случае, если предыдущие шаблоны не найдены).
WordPress ищет шаблоны в следующей последовательности (файлы, перечисленные слева направо, будут пробоваться именно в таком порядке):
is_404():404.php;is_search():search.php;is_home():home.php,index.php;is_attachment():<media-type>.php,<media-subtype>.php,<media-type>_<media-subtype>.php,attachment.php;is_single():single.php;is_page():<page-template>.php,page.php;is_category():category-<cat-id>.php,category.php;is_tag():tag-<tag>.php,tag.php;is_tax():taxonomy-<taxonomy>-<term>.php,taxonomy-<taxonomy>.php,taxonomy.php;is_author():author.php;is_date():date.php;is_archive():archive.php;is_comments_popup():comments-popup.php;is_paged():paged.php;- если ничего не найдено:
index.php.
Для приведённого примера (http://blog.sjinks.org.ua/?category_name=CSS&term=layout&taxonomy=post_tag) шаблоны будут "пробоваться" в следующей последовательности:
category-25.php;category.php;taxonomy-post_tag-layout.php;taxonomy-post_tag.php;taxonomy.php;attachment.php;index.php.
Отдельного слова заслуживают вложения: если, например, имеется вложение с MIME-типом image/png, WordPress будет пытаться загрузить следующие шаблоны:
image.php(type);png.php(subtype);image_png.php(type/subtype);attachment.php;index.php.
На всякий случай отмечу: имя шаблона может быть переопределено фильтром xxx_template, где xxx — это archive, category, tag, taxonomy и т.п.

Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.





Стоило бы упомянуть, что некоторые из этих функций можно вызывать с параметром, например, is_page(’about’), пригодится если нужно показать в меню активную страницу.