Как использовать условные теги в WordPress
Опубликовано: 2020-06-09Что мне больше всего нравится в WordPress, так это то, что он включает в себя множество функций, которые значительно упрощают нашу работу как разработчиков. Например, рассмотрим такие функции, как esc_attr , экранирующая текст, чтобы его можно было безопасно добавить в атрибут тега HTML, или esc_html , экранирующая текст, чтобы его можно было безопасно включить в HTML-страницу. Или взгляните на некоторые функции, которые нам нужны для очистки данных, которые мы получаем от пользователя: sanitize_text_field , sanitize_textarea_field или sanitize_email . Вы настолько привыкаете к этим четко определенным функциям, что действительно скучаете по ним, когда вам нужно разработать что-то за пределами области WordPress и обнаружить, что они больше не доступны!
Набор функций, которыми мы располагаем при разработке на WordPress, невероятно велик. И чем больше мы с ними знакомы, тем проще писать качественный код.
Сегодня я хотел бы рассказать вам об условных тегах в WordPress: что это такое, как их использовать, что в них может вводить в заблуждение и чем они так полезны. Если вы разработчик плагинов или тем и еще не знакомы с ними, не пропустите этот пост.
Что такое условные теги WordPress?
Условные теги — это функции, определенные в WordPress, результатом которых является логическое значение (то есть либо true , либо false ). Это функции, которые мы можем использовать как в наших плагинах, так и в темах для принятия условных решений на основе контента, который мы собираемся отображать.
Что делает условные теги замечательными, так это то, что, как правило, их имена не требуют пояснений и приводят к коду, который очень легко понять. Например, если вы используете условный тег is_sticky в своем плагине, он явно вернет true , если внутри цикла WordPress мы обрабатываем прикрепленный пост. Нет сомнений в его семантике, верно?
Прежде чем мы начнем с нескольких примеров, имейте в виду, что условные теги доступны только после того, как WordPress определил, какой контент запросил посетитель. Если мы попытаемся использовать их раньше, их результат всегда будет false . Другими словами, мы можем использовать их только после выполнения действия posts_selection .
Наиболее распространенные условные теги
Большинство условных тегов в WordPress начинаются с is_ , так как ответ на вопрос типа «это бла-бла?» является логическим значением: либо «да», либо «нет». Но, к сожалению, этот критерий соблюдается не всегда (как мы увидим ниже).
В WordPress есть много условных тегов, с которыми вы будете знакомиться по мере необходимости. Но есть довольно много чрезвычайно распространенных, и чем раньше вы с ними познакомитесь, тем лучше. Итак, давайте рассмотрим их поближе:
-
is_single. Он проверяет, является ли текущий элемент записью WordPress или экземпляром записи любого другого пользовательского типа (например, продуктом WooCommerce). -
is_page. Он проверяет, является ли текущий элемент страницей WordPress. -
is_attachment. Он проверяет, является ли текущий элемент вложением. Вложения — это те файлы, которые вы загружаете в свою медиатеку, такие как изображения, видео, файлы и т. д. -
is_singular. Он проверяет,trueли какая-либо из трех предыдущих функций. То есть он проверяет, является ли текущий элемент записью, страницей, вложением или любым другим типом записи. -
comments_open. Возвращаетtrue, если посетители могут комментировать текущий элемент. Видеть? Здесь у вас есть пример, где условный тег не начинается сis_. -
is_category. Он проверяет, просматриваем ли мы в данный момент страницу архива категорий. -
in_category. Возвращает true, если текущая запись находится в данной категории. -
is_tag. Он проверяет, просматриваем ли мы в данный момент страницу архива тегов. -
has_tag. Он проверяет, помечен ли текущий пост указанным тегом. -
is_main_query. Он проверяет, находимся ли мы в основном цикле WordPress.
Знаете ли вы, что существуют условные теги, которые могут ввести в заблуждение?
В некоторых случаях условные теги имеют имена, которые могут привести нас к путанице, поскольку то, что они оценивают, кажется , и то, что они действительно оценивают , — это разные вещи:
-
is_admin. Вы можете подумать, что эта функция проверяет, является ли текущий пользователь администратором, верно? Неправильно! Он проверяет, находимся ли мы на странице в панели управления WordPress (и тогда результат будетtrue) или во внешнем интерфейсе (то естьfalse). -
is_home. Раньше я думал, что эта функция проверяет, является ли текущая страница вашей домашней страницей. Например, на нашем веб-сайте это будетhttps://neliosoftware.com. Но, к сожалению, это не так. WordPress родился как платформа для ведения блогов, и я думаю, что это пример некоего «устаревшего кода».is_home— это условная функция, которая проверяет, является ли текущая страница страницей вашего блога . Таким образом, например, если вы используете настройку WordPress по умолчанию,is_homeдействительно возвращаетtrue, когда посетитель находится на домашней странице (https://yourweb.com), потому что на этой странице отображаются ваши последние сообщения в блоге. Но если вы настроите страницу своего блога на что-то другое (например,https://yourweb.com/blog), тоis_homeбудет иметь значениеtrue, когда посетитель запрашиваетhttps://yourweb.com/blog, и значениеfalseв противном случае. -
is_front_page. И это условный тег, который даст вам знать, когда посетитель находится на «домашней странице». -
is_dynamic_sidebar. Эта функция проверяет, есть ли в вашей теме одна или несколько боковых панелей виджетов, и, если да, она возвращаетtrue, если хотя бы одна из этих боковых панелей не пуста.
Параметризация условных тегов
Хотя большинство условных тегов являются функциями, которые можно вызывать без параметров, многие из них поддерживают параметры. Если мы их используем, мы можем более конкретно указать критерии, которым должен соответствовать текущий пост. И делают они это вполне логично.

В зависимости от конкретной функции, которую мы используем, мы можем захотеть проверить, имеет ли текущий элемент определенный идентификатор или определенный ярлык, является ли он экземпляром определенного типа записи или даже имеет ли он определенный заголовок. Например:
-
is_singular( 'product' )проверяет, является ли текущий элемент продуктом . -
is_page( 'Contact Us' )проверяет, является ли заголовок текущей страницы «Свяжитесь с нами». Эта функция принимает различные типы аргументов и, в зависимости от того, что вы предоставляете, проверяет то одно, то другое. Например, вы можете проверить, имеет ли текущий элемент определенный идентификатор, определенный заголовок или ярлык. Довольно аккуратно, да? Вы даже можете использовать списки в качестве параметров! -
is_single( [ 5, 10, 11 ] )проверяет, равен ли идентификатор текущего элемента 5, 10 или 11. Он очень похож наis_page, но, как мы уже говорили, он работает для постов, отличных от page.
Как использовать условные теги
Давайте рассмотрим пару примеров, где могут пригодиться условные теги.
Настройка шаблонов
Как вы, наверное, уже догадались, условные теги, безусловно, полезны в темах. Если вы хотите, чтобы тема отображала ту или иную информацию в зависимости от типа контента, просматриваемого в любой момент времени (и это то, что мы будем делать часто), условные теги — ваши союзники:
<?php // ... if ( ! is_page() ) { echo '<span class="whatever">'; echo $something_relevant; echo '</span>'; } // ...Это позволяет использовать один и тот же шаблон для разных типов контента и настраивать каждый из них с помощью условных тегов.
Условная постановка активов в очередь
Но условные теги чрезвычайно полезны и для разработчиков плагинов. В частности, они помогают нам загружать части нашего плагина условно, в зависимости от результатов, которые мы получаем от условных тегов.
Например, представьте, что мы разрабатываем плагин, который добавляет некоторую функциональность к нашим сообщениям в блоге. Предположим, что эта функциональность требует, чтобы мы поставили скрипт и таблицу стилей в очередь на внешний интерфейс. Для постановки скриптов и стилей в WordPress у нас есть фильтр wp_enqueue_scripts :
function nelio_plugin_fancy_feature() { wp_enqueue_script( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.js' ); wp_enqueue_style( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.css' ); } add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' ); Проблема с предыдущим фрагментом заключается в том, что он всегда ставит наши активы в очередь, независимо от того, что запросил посетитель. Всякий раз, когда запускается wp_enqueue_scripts (и это происходит при каждом внешнем запросе), будет вызываться наша функция обратного вызова, и будут добавлены наш скрипт и таблица стилей. Но мы сказали, что наша функция влияет только на сообщения в блогах, поэтому… нам действительно нужно всегда ставить эти активы в очередь? Конечно, нет! И мы можем улучшить это, используя соответствующий условный тег:
function nelio_plugin_fancy_feature() { if ( ! is_single( 'post' ) ) { return; } wp_enqueue_script( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.js' ); wp_enqueue_style( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.css' ); } add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' );В итоге
Условные теги WordPress позволяют нам тестировать различные критерии нашего контента и, таким образом, адаптировать то, что произойдет, исходя из этого. Несмотря на их чрезвычайную простоту, это очень полезные функции, которые делают наш код более понятным и эффективным.
Я надеюсь, что вы узнали что-то сегодня, и, как всегда, если у вас есть какие-либо вопросы или комментарии, сообщите нам об этом в разделе комментариев ниже.
Избранное изображение Джастина Любке на Unsplash.
