четверг, 14 февраля 2013 г.

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


Перевод статьи из Кодекса WordPress: Conditional Tags

Введение

Условные теги (Conditional Tags) можно использовать в файлах-шаблонах Темы для того, чтобы указывать какой контент отображать на определенной странице в зависимости от того, выполнены ли какие-либо из заданных условий для этой страницы. Например, вы можете отображать какой-то текст только на главной странице. C условным тегом is_home () сделать это легко.
Обратите внимание на перевод статьи Иерархия шаблонов Темы WordPress (оригинал, англ. яз.), это тесно переплетенные между собой темы!


Условия для...

Работа всех условных тегов построена на том, чтобы в тот момент, когда выполнено конкретное условие, вернуть TRUE (т.е. сработать). Все возможные условия перечислены ниже.

Главная страница

is_home ()
Когда отображается главная страница (в WordPress 2.1 эта функция работает по-другому, чем в более старых версиях WordPress, смотрите static Front Page.)
На заметку: если вы выбираете Постоянную страницу в качестве главной страницы блога (см. внизу), этот условный тег будет считать Главной страницу с постами.

Главная страница (новый тег)

is_front_page ()
Когда отображается главная страница блога, вне зависимости от того, что на ней выводится: записи или Статическая Страница. Срабатывает когда показывается главная страница блога, при этом не важно что стоит в настройках: Настройки->Чтение->На главной странице отображать Ваши последние записи или Постоянная страница. Returns true when the main blog page is being displayed and the 'Settings->Reading->Front page displays' is set to «Your latest posts», or when 'Settings->Reading->Front page displays' is set to «A static page» and the «Front Page» value is the current Page being displayed. Кстати: этот условный тег добавлен в WordPress версии 2.5 и выше.

Панель администратора

is_admin ()
Когда отображается Доска объявлений или меню администратора.

Одиночная запись (на отдельной «своей» странице)

is_single ()
Когда отображается одиночный пост.
is_single ('17')
Когда отображается одиночный пост с id=17.
is_single ('Irish Stew')
Когда отображается одиночный пост с заголовком «Irish Stew».
is_single ('beef-stew')
Когда отображается одиночный пост с короткой ссылкой beef-stew.
is_single (array (17,'beef-stew','Irish Stew'))
Когда отображается одиночный пост, при этом должно сработать хотя бы одно условие из трех для этой записи: 1) ID 17 или 2) короткая ссылка «beef-stew» или 3) заголовок «Irish Stew». Кстати: возможность использования массива была добавлена в WordPress версии 2.5.

Любая страница, на которой выводятся записи

comments_open ()
Когда комментарии разрешены для текущего Поста, обрабатываемого в Цикле.
pings_open ()
Когда пинги разрешены для текущего Поста, обрабатываемого в Цикле.

Страница Постоянной страницы

Это относится только к Постоянным страницам.
is_page ()
Когда отображается Постоянная страница.
is_page ('42')
Когда отображается Постоянная страница с id=42
is_page ('About Me And Joe')
Когда отображается Постоянная страница с заголовком «About Me And Joe».
is_page ('about-me')
Когда отображается Постоянная страница с короткой ссылкой «about-me».
is_page (array (42,'about-me','About Me And Joe'))
Когда отображается Постоянная страница, при этом должно сработать хотя бы одно условие из трех для этой Постоянной страницы: 1) ID 42 или 2) короткая ссылка «about-me» или 3) заголовок «About Me And Joe». Кстати: возможность использования массива была добавлена в WordPress версии 2.5.

Дочерние страницы Постоянной страницы

Такого условного тега как is_subpage () не существует, но вы можете использовать такой код:
  1. <?php  
  2. // Get $post if you're inside a function  
  3. global $post;  
  4. if (is_page() && $post->post_parent ) {  
  5. // This is a subpage  
  6. else {  
  7. // This is not a subpage  
  8. }  
  9. ?>  
Если вам нужно узнать: это текущая Постоянная страница или дочерняя страница этой конкретной Постоянной страницы (например, для того, чтобы отображать разные баннеры на разных Постоянных страницах, включая их «дочки»), посмотрите в админ. панели ID Постоянной страницы первого уровня и затем используйте этот код, который выведет разные баннеры:
  • на Постоянной странице (ID=2) с короткой ссылкой about и всех ее подстраницах-дочках баннер home.jpg
  • на Постоянной странице (ID=56) с короткой ссылкой learning и всех ее подстраницах-дочках баннер teaching.jpg
  • и т.д.
  1. <?php if (is_page(about) || $post->post_parent=="2") {  
  2. $bannerimg="home.jpg";  
  3. elseif (is_page(learning) || $post->post_parent=="56") {  
  4. $bannerimg="teaching.jpg";  
  5. elseif (is_page(admissions) || $post->post_parent=="15") {  
  6. $bannerimg="admissions.jpg";  
  7. else {  
  8. $bannerimg="home.jpg" ; // Fall-through  
  9. }  
  10. ?>  

Используется ли индивидуальный шаблон страницы

Начиная с WordPress версии 2.5 и выше можно определить, какой Индивидуальный шаблон используется для вывода конкретной страницы.
is_page_template ()
Используется ли какой-либо индивидуальный шаблон для отображения Постоянной страницы? (тут про индивидуальные шаблоны немного по-русски).
is_page_template ('about.php')
Используется ли индивидуальный шаблон 'about.php'? Заметьте, что этот условный тег в отличие от остальных, если вы хотите определить конкретный шаблон Постоянной страницы, то используйте имя файла, т.е. about.php или my_page_template.php.

Страница рубрики

is_category ()
Когда отображается рубрика.
is_category ('9')
Когда отображается рубрика с ID=9.
is_category ('Stinky Cheeses')
Когда отображается рубрика с названием «Stinky Cheeses».
is_category ('blue-cheese')
Когда отображается рубрика с короткой ссылкой «blue-cheese».
is_category (array (9,'blue-cheese','Stinky Cheeses'))
Когда отображается рубрика, при этом должно сработать хотя бы одно условие из трех для этой рубрики: 1) ID 9 (term_ID) или 2) короткая ссылка «blue-cheese» или 3) название «Stinky Cheeses». Кстати: возможность использования массива была добавлена в WordPress версии 2.5.
in_category ('5')
Когда отображается одиночная запись, которая находится в рубрике с ID=5. Подробнее тут
Кстати: запомните, что is_category и in_category это совершенно разные условные теги!
Смотрите также is_archive () и шаблоны рубрик.

Страница тега (метки)

is_tag ()
Когда отображается страница архива тега (список постов с этим тегом).
is_tag ('mild')
Когда отображается страница архива тега 'mild'.
is_tag (array ('sharp','mild','extreme'))
Когда отображается архив тега, при этом должно сработать хотя бы одно условие из трех для этой страницы: 1) короткая ссылка «sharp», «mild», или «extreme». Кстати: возможность использования массива была добавлена в WordPress версии 2.5.
has_tag ()
Когда текущий пост имеет тег. Используется внутри Цикла. Кстати: возможность использования массива была добавлена в WordPress версии 2.6.
has_tag ('mild')
Когда текущий пост имеет тег 'mild'.
has_tag (array ('sharp','mild','extreme'))
Когда текущий пост имеет тег какой-либо тег из перечисленных в массиве.
Смотрите также is_archive () и шаблоны страниц для тегов.

Страница автора

is_author ()
Когда отображается страница автора.
is_author ('4')
Когда отображается страница автора, у которого ID=4.
is_author ('Vivian')
Когда отображается страница автора с ником «Vivian».
is_author ('john-jones')
Когда отображается страница автора с именем «john-jones».
is_author (array (4,'john-jones','Vivian'))
Когда отображается страница автора, при этом должно сработать хотя бы одно условие из для этой страницы: ID автора = 4, имя «john-jones», или ник «Vivian». Кстати: возможность использования массива была добавлена в WordPress версии 2.5.
Смотрите также is_archive () и шаблоны для страниц авторов.

Страница даты

is_date ()
Когда отображается архив любого периода времени (за месяц, за год, за день или архив основанный на дате).
is_year ()
Когда отображается архив за год.
is_month ()
Когда отображается архив за месяц.
is_day ()
Когда отображается архив за день.
is_time ()
Когда отображается почасовой архив за час, поминутный или посекундный.
Смотрите также is_archive ().

Страница архива

is_archive ()
Когда отображается любой тип архива, буть то рубрика, страница тега, страница автора и даты.

Страница результатов поиска

is_search ()
Когда отображается страница результатов поиска.

Страница ошибки 404 (ничего не найдено)

is_404 ()
Когда на какой-либо странице случается ошибка «HTTP 404: Не найдено».

2,3,4 и т.д. страницы

is_paged ()
Когда отображается 2, 3 и т.д. страницы блога. Это относится к страницам архива или главной странице блога, когда вы переходите по ссылке Ранее (в Теме default) или на 2, 3, 4 и т.д. страницы (когда используется плагин типа wp-pagenavi). Это не относится к разбиению поста или Постоянной страницы на страницы с помощью тега <!--nextpage--> QuickTag.

Аттачмент (прикрепленный файл)

is_attachment ()
Когда отображается на отдельной (своей) странице аттачмент (прикрепленный файл) к посту или Постоянной странице. Обычно это картинка или любой другой файл, загруженный через стандартный загрузчик при написании/редактировании поста или Постоянной страницы. Аттачменты можно отображать на их собственной странице и использовать для них свой шаблон в папке Теме. для более детальной информации посетите страницу Using Image and File Attachments.

RSS лента

is_feed ()
When the site requested is a Syndication. Этот условный тег обычно не используется обычными пользователями, а используется самим WordPress или разработчиками плагинов.

Трэкбек

is_trackback ()
When the site requested is WordPress' hook into its Trackback engine. Этот условный тег обычно не используется обычными пользователями, а используется самим WordPress или разработчиками плагинов.

Предпросмотр

is_preview ()
Когда отображается одиночный неопубликованный пост в режиме предпросмотра.

Есть ли цитата (excerpt) у поста?

!empty ($post->post_excerpt)
Штатного способа проверки на существование цитаты (excerpt) у поста НЕТ, но вы можете использовать приведенный выше код. Удалите восклицательный знак '!' из этого кода чтобы выполнять проверку 'нет цитаты'.

Работающие примеры

Здесь несколько примеров для демонстрации того, как следует использовать условные теги.

Одиночный пост

Этот пример показывает как использовать условный тег is_single () для того, чтобы отобразить информацию только на странице одиночного поста:
  1. <?php if (is_single())  
  2. {  
  3. echo 'Это один из постов в рубрике ' . single_cat_title() . ', вот так!';  
  4. }  
  5. ?>  

Разница, основанная на дате

Если кто-то просматривает ваш блог по датам, то он увидит «помеченные» посты разных лет разным цветом бэкграунда:
  1. <?php  
  2. // начинаем Цикл  
  3. if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>  
  4. <h2 id="post-<?php the_ID(); ?>">  
  5. <a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка <?php the_title(); ?>">  
  6. <?php the_title(); ?></a></h2>  
  7. <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small><?php  
  8. // если отображаем архив даты  
  9. if (is_date())  
  10. {  
  11. if (date('Y') != get_the_date('Y'))  
  12. {  
  13. // этот пост был написан в прошлом году  
  14. // поэтому припишем css класс "oldentry" к блоку с постом,  
  15. // чтобы придать ему отличный от других блоков вид  
  16. echo '<div class="oldentry">';  
  17. else {  
  18. echo '<div class="entry">';  
  19. }  
  20. else {  
  21. echo '<div class="entry">';  
  22. }  
  23. the_content('Далее »');  
  24. ?>  
  25. </div>  

Разный контент в боковой колонке (сайдбаре)

Этот пример выводит различный контент в боковой колонке в зависимости от того, какой тип контента просматривается в текущий момент.
  1. <!-- начало боковой колонки -->  
  2. <div id="sidebar">  
  3. <?php  
  4. // let's generate info appropriate to the page being displayed  
  5. if (is_home()) {  
  6. // на главной странице покажем список рубрик первого уровня:  
  7. echo "<ul>";  
  8. wp_list_cats('optionall=0&sort_column=name&list=1&children=0');  
  9. echo "</ul>";  
  10. elseif (is_category()) {  
  11. // на странице рубрики покажем все рубрики всех уровней  
  12. echo "<ul>";  
  13. wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');  
  14. echo "</ul>";  
  15. elseif (is_single()) {  
  16. // на странице одиночного поста покажем... что-нибудь, впишите сами:  
  17.   
  18. elseif (is_page()) {  
  19. // на странице Постоянной страницы. А какой именно?  
  20. if (is_page('Обо мне')) {  
  21. // Постоянная страница About  
  22. echo "<p>Это страница обо мне!</p>";  
  23. elseif (is_page('Используемые плагины')) {  
  24. echo "<p>На этой странице список используемых плагинов, я использую WordPress версии " . bloginfo('version') . "</p>";  
  25. else {  
  26. // для всех других Статичных страниц  
  27. echo "<p>Привет, я Педро!</p>";  
  28. }  
  29. else {  
  30. // для всех остальных типов страниц (архивов, страницы рез-тов поиска, 404 ошибки и т.д.)  
  31. echo "<p>Педро славный парень.</p>";  
  32. // на этом все!  
  33. ?>  
  34. <form id="searchform" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">  
  35. <div>  
  36. <input type="text" name="s" id="s" size="15" />  
  37. <input type="submit" value="<?php _e('Search'); ?>" />  
  38. </div>  
  39. </form></div>  
  40. <!-- конец боковой колонки -->  

Полезная страница ошибки 404

Когда посетитель получает 404 ошибку, то может растеряться. Вы можете извлечь некоторую пользу для себя, т.к. каждый раз, как кто-то попадает на несуществующую страницу вам будет отправляться автоматическое письмо-уведомление. Using Wordpress, you can take the edge off a 404 and make it helpful to users, and yourself, too, by emailing whenever the user clicks a link to a non-existent page. If you use this, don't forget o
  1. <p>You  
  2. <?php  
  3. #некоторые переменные для скрипта  
  4. #вы можете тут что-то поменять по своему усмотрению.  
  5. $adminemail = get_bloginfo('admin_email');  
  6. #эл. адрес администратора, указанный в настройках блога  
  7. $website = get_bloginfo('url');  
  8. #урл блога  
  9. $websitename = get_bloginfo('name');  
  10. #имя вашего блога  
  11. if (!isset($_SERVER['HTTP_REFERER'])) {  
  12. #politely blames the user for all the problems they caused  
  13. echo "tried going to "; #starts assembling an output paragraph  
  14. $casemessage = "Не все потеряно!";  
  15. elseif (isset($_SERVER['HTTP_REFERER'])) {  
  16. #это поможет посетителю найти то, что ему нужно, а администратор будет уведомлен об этом кривом адресе странички  
  17. echo "кликните сюда"; #now the message says You clicked a link to...  
  18. #опеределяем сообщение, которое прийдет администратору  
  19. $failuremess = "Кто-то пытался перейти сюда: $website"  
  20. .$_SERVER['REQUEST_URI']." и получил 404 ошибку (страница не найдена). ";  
  21. $failuremess .= "Проверьте эту страницу и исправьте положение дел  
  22. Он пришел отсюда: ".$_SERVER['HTTP_REFERER'];  
  23. mail($adminemail"Плохая ссылка на ".$_SERVER['REQUEST_URI'],  
  24. $failuremess"От: $websitename <noreply@$website>"); #email you about problem  
  25. $casemessage = "Уведомление о 404 ошибке отправлено администратору.";#set a friendly message  
  26. }  
  27. echo " ".$website.$_SERVER['REQUEST_URI']; ?>  
  28. and it doesn't exist. <?php echo $casemessage; ?>  Вы можете вернуться назад  
  29. и попробовать снова, или поищите так:  
  30. <?php include(TEMPLATEPATH . "/searchform.php"); ?>  
  31. </p>  

Динамическая подсветка меню

Я не буду переводить этот параграф, т.к. он давно устарел (странно, что в оригинале статьи в Кодексе он еще существует): The Dynamic Menu Highlighting article discusses how to use the conditional tags to enable highlighting of the current page in a menu.

Комментариев нет:

Отправить комментарий