Введение в понятие "условные теги WordPress" и короткое описание всех таких тегов (функций).
Многие наверное знают, что такое условные теги в WordPress, тогда как, другие возможно только слышали о них, а может даже и не слышали. Для тех кто не знает, что это такое, будет полезно ознакомится с тем что написано ниже.
Итак. "Условные теги" (Conditional Tags) называются так, потому что проверяю выполняется ли кое-либо условие. На самом деле условные теги — это обычные PHP функции WP, а называют их тегами, чтобы как-то выделить из числа обычных функций, ведь они созданы специально для удобной настройки и создания шаблонов (тем).
Характеристики условных тегов в WordPress
- Каждый из тегов описанных ниже создан для проверки определенного условия(й).
- Некоторые условные теги могут принимать определенные параметры для проверки. Пример, is_page(20); проверяется ID текущей страницы, если он равен 20 то условие выполняется (тег срабатывает).
- Любой условный тег возвращает всего одно логическое значение: "Правда" (true) или "Ложь" (false), основываясь на котором можно выполнять или не выполнять что-либо.
Небольшой пример использования условных тегов: нам нужно вывести ссылку в подвале, причем сделать это надо только на главной странице. Для этих целей в WordPress предусмотрен условный тег - is_front_page(), или is_home(), которые проверяют на какой странице находится посетитель и если это главная страница возвращается значение true. Посмотрим реализацию это задачи в коде:
<?php if ( is_front_page() ){ ?>
<a href="http://site.ru">Текст ссылки</a>
<?php } ?>
Вместо ссылки может быть любой HTML/PHP код, который будет отображаться/выполнятся только на главной странице.
Вместо is_front_page() обычно используется is_home(). Разницу смотрите ниже.
Вот так, коротко об условных тегах WordPress.
Теперь, переходим к самим тегам:
Страницы пагинации (/page/2 и т.д.) не учитываются.
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".
if ( is_page_template() ){ ... } // сработает на постоянной странице, для которой используется отдельный шаблон
if ( is_page_template('my_page.php') ){ ... } // сработает на постоянной странице, для которой используется отдельный шаблон с названием файла my_page.php
if( is_page() or is_post() ).if( is_year() or is_month() or is_day() or s_time() )
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".
if ( is_tag() ) { ... } // сработает для любых страниц меток/тегов
if ( is_tag('wordpress') ) { ... } // сработает для страницы метки/тега Слаг (название), которого равен 'wordpress'
// вариант с массивом
if ( is_tag( array('wordpress','tag_name' ) ) { ... } // сработает для страницы метки/тега Слаг (название), которого равен wordpress или tag_name
Менее популярные условные теги WordPress (используются редко или предназначены не для шаблонов)
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
Условные теги и проверки предназначенные для отдельных страниц или постов
if ( has_tag() ) { ... } // сработает если у поста есть хотя бы одна метка
if ( has_tag('tag_name') ) { ... } // сработает если у поста есть метка с названием tag_name
// Вариант с массивом
if ( has_tag( array('tag_name','tag_name2') ) ) { ... }
// сработает если у поста есть метка с названием tag_name или tag_name2
- Предыдущие записи
- Исполняемый php код в записях Wordpress ← 6 Июль 2010 // 32
- Сравнение СЕО плагинов platinum SEO Pack и All in One SEO Pack и отказ от них ← 24 Май 2010 // 89
- Функция для вывода последних записей в WordPress ← 17 Май 2010 // 110

Частенько встречаю это выражение, но ни разу никто не объяснил, как понять/узнать, это Loop или не Loop
C чего, например, начинается и чем заканчивается?
Только сегодня и только для вас: что такое the loop
Кама, подскажи пожалуйста. Почему Вордпресс не понимает такого условия is_tag('Nokia 5230')? Просто не видит метки под названием Nokia 5230 или слага. Например, если используется is_tag() то работает. Т.е для конкретного условия не работает, для всех работает. Использую последний Simple tags и WordPress 3.0.4. Огромное спасибо.
ЗЫ: Спасибо за прошлый ответ.
Если слаг указать, т.е.
if( is_tag('nokia-5230') ) // делаем что-нитьдолжен понимать. Вы что-то не так делаете значит, может не там используете вообще?
Спасибо за ответ, но он вновь не работает. В общем мой код
<?php if( is_tag('nokia-5230') ) { remove_action('wp_head', array($psp, 'echo_to_blog_header')); } ?>добавил я его в function.php. По твоему прошлому совету, я нашел функцию плагина Platinum Seo, который выводит хедер.
Такой код работает, но убирает вывод на всех страницах.
remove_action('wp_head', array($psp, 'echo_to_blog_header'));Тогда если задается условие, а именно страница тегов Nokia 5230, где надо хедер порезать, перестает работать.
Почему вордпресс возвращает фалсе на условие is_tag('Nokia 5230') причем данный тег есть. Возможно слаг состоящий из 2х слов нельзя использовать? Пробовал и твой вариант: nokia-5230 - не видит.
Помоги пожалуйста.
Правильно что не работает — в functions.php низя его совать! functions.php подгружается гораздо раньше темы, соответственно там вообще не понятно метка это или не метка.
В header.php до функции wp_head() вставьте свою строчку:
<?php if( is_tag('nokia-5230') ) remove_action('wp_head', array($psp, 'echo_to_blog_header')); ?>Условные теги в functions.php можно использовать только через хуки. Например в вашем варианте можно так, если нужно именно в functions.php добавить этот код:
<?php add_filter('wp_head', 'my_head_correct', -10); function my_head_correct(){ global $psp; if( is_tag('nokia-5230') ) remove_action( 'wp_head', array($psp, 'echo_to_blog_header') ); } ?>Не уверен на 100%, что код сработает, но теоретически как-то так.
Первый вариант не заработал, поскольку я его еще в прошлый раз попробовал. Второй заработал и за это огромное спасибо.
Век живи... Спасибо за подробный разбор. Пытался 2 дня вывести на отдельной странице php код с помощью is_tag()... Невнимателен был. Решил всё с помощью has_tag()
И что удивительно видел в кодексе это.. но прошел мимо. Родной язык понятней оказался
Как ни мучаюсь - не могу вывести на отдельной странице условие:
<a<?php if ( is_page( '20092' ) ) { echo ' class="rsHDgal2"'; } ?> href="?page_id=20092" title="Перейти в галерею HD трейлеров"></a>страница ?page_id=20092 так что id передал верно. (в исходном тексте генерируемой страницы нет этого класса: rsHDgal2)
Думал что раз эта страница шаблона - то нужно
выводить. но тоже не срабатывает. Версия вордпресса 2.7.1. В чем проблема не подскажете? для тегов, постов, категорий - всё отлично срабатывает. А для отдельной страницы не пашет
сам себе отвечу: проблему решил сбросом цикла
- код поставил перед нужным мне условием.
Думаю что у вас тут:
is_page() Страница Постоянной страницы, т.е. страница типа page. Функция принимает такие же параметры как и is_single(): ID страницы, Заголовок страницы, Слаг страницы или массив из любых этих параметров. is_page_template() .....,после примера, нужно добавить это. Чтобы другие не споткнулись через эти грабли (и проверил is_page_template( 'about.php' ) - также заработало)
В Кодексе написано:
А можно что-то придумать для заголовка конкреной записи? Например, прикрепить значок к заголовку конкретной записи.
Какой значок?
Картинку? Да можно, через произвольные поля, почитайте про них.
Вопрос:
А можно ли одну и туже метку поставить на 2000 записей? Например на сайте столько фильмов и можно ли каждому добавить метку: кино. Не будут ли от этого санкции со стороны поисковиков???
Я не оптимизатор, не знаю. Но думаю, так метки лучше закрыть от индексации...