Подробнее об is_xxx()

В WordPress есть целое семейство функций — is_xxx(), возвращающих информацию о том, что именно запросил пользователь.

С этими всеми функциями есть одна проблема — они отвратительно документированы. Как следствие, с неоднозначностью возвращаемых результатов приходится разбираться самостоятельно.

Вся магия, связанная с определением типа запроса, находится в файле wp-includes/query.php (сама логика разбора реализована в методе WP_Query::parse_query()).

Условно все переменные, передаваемые в запросе, можно разделить на семь групп, первые шесть из которых являются взаимоисключающими (в них приоритет отдаётся параметрам из группы с меньшим номером):

  1. 404 — страница не найдена. Обращаю внимание, что 404.php вызывается только в том случае, если условия поиска являются однозначными и при любом наборе данных соответствуют лишь либо одной, либо ни одной записи.
  2. Вложения (параметры attachment, attachment_id, subpost и subpost_id). А Вы знаете, что WordPress позволяет оставлять комментарии даже к вложениям? Если нет, то попробуйте: ссылка 1 и ссылка 2.
  3. Записи (параметры name и p; а также, если установлены все шесть параметров year, monthnum, day, hour, minute и second);
  4. Страницы (параметры static, pagename и page_id)
  5. Поиск (параметр s)
  6. Архив — всё, что связано с таксономией, авторами, датой и временем (в эту группу относятся параметры 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);
  7. Прочие параметры, играющие роль модификаторов (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 и т.п.

Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Yandex.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Писали
  • СМИ 2
  • Моё Место
  • 100 Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - IN.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA
  • Slashdot
  • Magnolia
  • Blogmarks
  • Current
  • Meneame
  • Oknotizie
  • Diigo
  • Funp
  • Hugg
  • Dealspl.us
  • N4G
  • Mister Wong
  • Faves
  • Yigg
  • Fresqui
  • Care2
  • Kirtsy
  • Sphinn
  • SaveThis.ru

Связанные записи

23
Сен
2008

Комментарии к статье «Магические условные тэги WordPress» (1)  »

  1. Евгений says:

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

Подписаться на RSS-ленту комментариев к статье «Магические условные тэги WordPress» Trackback URL: http://blog.sjinks.org.ua/wordpress/341-magic-conditional-tags-of-wordpress/trackback/

Оставить комментарий к записи «Магические условные тэги WordPress»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя