Умовні теги у WordPress

У цій статті я постараюся зрозуміло пояснити що таке «умовні теги в WordPress» (Conditional Tags). Повний список умовних тегів дивіться на цій сторінці .

Умовні теги так називаються, тому що, сюрприз-сюрприз, перевіряють чи виконується якась умова. Насправді умовні теги — це допоміжні PHP функції WordPress. А називають їх «тегами», щоб виділити з-поміж інших PHP функцій.

Здебільшого умовні теги створені для зручного виконання перевірок різних умов, наприклад: чи ми знаходимося на головній сторінці сайту, чи авторизований користувач і т.д.

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

  • Кожен із тегів створений для перевірки певної умови . Грубо кажучи будь-яку функцію, що починається з is_можна назвати умовним тегом.

  • Деякі умовні теги можуть приймати параметри . Наприклад, is_page( 20 ) – перевіряє ID поточної сторінки. Якщо ID дорівнює 20, то умова виконується (тег спрацьовує).

  • Будь-який умовний тег повертає логічне значення : true чи false (правда чи брехня). На основі цієї відповіді можна щось робити чи не робити.

З умовними тегами дуже тісно пов’язана ієрархія файлів теми .

ВАЖЛИВО: не можна використовувати теги до спрацювання хука wp , тому що до цього хука ще немає даних для правильної роботи умовних тегів (не заповнені глобальні змінні, якими користуються умовні теги).

Таким чином, умовний тег не буде працювати, якщо використовувати його в тілі файлу теми functions.php тому що цей файл підключається раніше ніж спрацьовує хук wp . Зазвичай, умовні теги у файлі functions.php використовуються всередині інших функцій або хуків.

Приклад використання Умовних тегів

Припустимо, нам потрібно вивести посилання в підвалі і зробити це потрібно тільки на головній сторінці сайту. Для цього в WordPress є умовний тег is_home() . Ці функції повернуть true, лише в тому випадку, якщо сторінка, на якій знаходиться відвідувач, – це головна сторінка. У коді це виглядає так:

<?php
if( is_front_page() ){
	echo '<a href="http://example.com">Текст посилання</a>';
}
?>

Замість HTML може бути код PHP, який буде виконуватися тільки на головній сторінці. Замість is_front_page() може бути is_home() . Це схожі умовні теги, різницю дивіться нижче.

Список Умовних тегів WordPress

Найповніший список умовних тегів дивіться за цим посиланням .



is_home()
(основна сторінка)
Повертає true, якщо це головна сторінка блогу. Під основний розуміється контент встановлений головної сторінки, тобто. Якщо в установках (параметри > читання) встановити Постійну сторінку на головній сторінці, цей тег буде працювати тільки для цієї встановленої Постійної сторінки, а не для головної.


is_front_page()
(головна сторінка)
Повертає true, якщо ви на головній сторінці незалежно від того, що встановлено в налаштуваннях. Сторінки пагінації (/page/2 тощо) не враховуються.


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()
(архів за рік)
Архів за рік (example.com/2010)


is_month()
(архів за місяць)
Архів за місяць (example.com/2010/06)


is_day()
(архів за день)
Архів за день (example.com/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 буде такий:
example.com/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_404()
(сторінка 404)
Якщо сторінка помилки 404.


is_attachment()
(сторінка вкладення)
Якщо це окрема сторінка прикріпленого файлу (зазвичай картинки).


is_admin()
(сторінка адмінки)
Якщо це сторінка адмінки блогу.


is_user_logged_in()
(користувач авторизований)
Спрацьовує якщо користувач закладений.


current_user_can(‘право’)
(перевіряє право користувача)
Перевіряє права користувача, вчиняти ту чи іншу дію. Право користувача вказується у параметрі функції. Повний список прав
дивіться у кодексі . Наприклад:
if( current_user_can('manage_options') ){ ... }– ця умова перевірить, чи може поточний користувач редагувати опції, зазвичай таке право є у користувача з правами адміністратора.


have_posts()
(є записи для виведення)
Якщо поточний запит ВП повернув дані для побудови циклу loop, то простіше кажучи, якщо є пости на сторінці.

Умовні теги та перевірки призначені для окремих сторінок чи постів

Наступні умовні теги (перевірки) будуть працювати тільки на окремих сторінках, говорячи мовою цієї статті, якщо виконується умова: 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 (використовуються рідко або не призначені для шаблонів)

  • is_sticky() — Перевіряє чи приліплений поточний пост до головної сторінки сайту. Умовний тэг.
  • is_comment_feed() — Перевіряє, чи є запит, сторінкою фіда коментарів. Умовні тег.
  • is_comments_popup() — Determines whether the current URL is with the comments popup window.
  • is_preview() — Перевірять, чи користувач на сторінці перегляду запису. Умовний тег
  • is_trackback() — Перевіряє, чи є запит запитом на сторінку пінгів (trackback).
  • is_feed() — Перевіряє запитується чи зараз фід.

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *