Добавляем условную логику к своей WordPress теме

Дата публикации:Январь 26, 2018

Создание сайта с помощью WordPress обеспечивает высокую гибкость за счет возможностей дизайна и функциональности. При углублении в проектирование темы вы обязательно столкнетесь с необходимостью выбора определенной страницы, категории, типа записей или чего-либо подобного. В этой ситуации нас и спасает условная логика.

Условная логика – это мощная возможность языков программирования (в нашем случае PHP). С ее помощью мы можем проверять, выполняется ли какое-либо определенное условие, после чего производить какие-либо действия. Простой пример: проверка того, находится ли пользователь в настоящий момент на главной странице сайта. С помощью условной логики можно реализовать загрузку слайдера или определенного контента в каждом конкретном случае.

Что касается WordPress, в этой системе имеется много полезных условных тегов, которые позволяют протестировать всевозможные сценарии. Условные теги хорошо документированы, с их помощью можно значительно улучшить функциональность сайта.

Примечание: условные теги – это фрагменты PHP-кода, они должны прописываться в активной теме вашего сайта. В теме есть много мест, где можно использовать условную логику. Мы рекомендуем вам изучить иерархию шаблонов в WordPress, если вы еще этого не сделали, чтобы понять, как работают файлы тем.

Прежде чем пытаться внедрить новый код на работающий сайт, лучше всего сначала протестировать его в среде разработки (в тестовой среде, или «песочнице»). Учтите, что неправильно размещенный PHP код может в итоге привести к появлению «белого экрана смерти». Поэтому будьте особенно внимательны.

is_home()

Этот условный тег очень часто неверно понимается разработчиками. Посмотрев на тег, вы можете предположить, что is_home() используется для проверки домашней страницы вашего сайта. Однако это не так.

Он фактически ищет страницу, которая назначена в качестве страницы для вывода записей в панели администратора WordPress (Параметры – Чтение). По умолчанию WordPress использует вашу домашнюю страницу для вывода записей – но зачастую на многих сайтах вместо нее применяется статичная страница.

Таким образом, к примеру, если вы назначили страницу Blog для вывода записей в вашей теме, то is_home() будет искать именно ее:


<?php

// If this the Posts page, display a message.
if ( is_home() ): 

echo '<h2>Thanks for visiting our blog!</h2>';

endif;

?>

is_front_page()

А вот is_front_page() уже ищет страницу, заданную в качестве домашней страницы сайта – вне зависимости от того, является ли она статичной или нет. По общему признанию, это далеко не самая очевидная вещь в WordPress. Но понимание того, какой тег использовать, жизненно важно.

Что приятного в данном теге: если впоследствии вы назначите в качестве вашей домашней страницы другую страницу, вы по-прежнему будете таргетироваться на нужный вам участок сайта. Существуют, конечно, и более явные способы задания целевых страниц, но в рассмотренном нами случае вы будете застрахованы от возможных изменений:

<?php
// If this is the home page, show a special message.
if ( is_front_page() ) { ?>


<h1>Welcome</h1>

<?php 
// Otherwise, show the page title.
} else { ?>

<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>

<?php } ?>

is_single() и is_page()

Каждый из этих тегов выполняет двойную функцию. is_single() проверяет, является ли текущий URL записью. Это может быть как стандартная запись (пост), так и вложение или произвольный тип записей. Аналогично, is_page() возвратит true, если текущий URL-адрес является страницей. По умолчанию оба тега таргетируются на контент, который является либо записью, либо страницей. Эти условные теги являются самыми популярными.

<?php

// Target all posts.
if ( is_single() ):

echo 'You are on a single post.';

endif;

// Target all pages.
if ( is_page() ): 

echo 'This is a page';

endif; ?>

Однако вы можете также использовать эти теги для таргетинга на отдельную запись или страницу. Делается это с помощью добавления ID или слага.

<?php

// Target About Us
if ( is_page( 'about-us' ) ): ?>

<a href="#"><img src="images/call-to-action.png" alt="See Our Products"></a>

<?php endif; ?>

Использование массива позволяет вам настроить таргетинг на разные участки контента.

<?php

// Target About Us and Contact Us pages.
if ( is_page( array('about-us', 'contact-us') ) ): ?>

<a href="#"><img src="images/call-to-action.png" alt="See Our Products"></a>

<?php endif; ?>

is_tax () и has_term ()

Таксономии играют важную роль в организации контента на сайте. Две самых популярных таксономии – это теги и рубрики. Они имеют свои собственные условные теги. Однако WordPress позволяет нам создавать и произвольные таксономии. К примеру, если ваш сайт содержит обзоры музыки, то у вас вполне может быть таксономия Genre. В ней мы могли бы перечислять разные жанры музыки, такие как Rock, Jazz, Pop и т.д.

<?php

// Display a message on our Genre archive pages.
if (is_tax('genre','rock','hip-hop','jazz') ):

echo '<h2>This is a genre archive. Enjoy!</h2>';

endif; ?>

is_tax() нацелен на страницу архивов таксономии. Если рассматривать наш пример с обзорами музыки, то в таком случае этот тег будет срабатывать, когда мы находимся на архивной странице для каждого из конкретных жанров.

has_term() используется для таргетинга на пост, который принадлежит к конкретной таксономии. Это полезно, к примеру, если мы хотим добавить специальные изображения для записей в каждом жанре музыки у нас на сайте.


<?php

// Show an image for the Rock genre.
if (has_term('rock','genre') ): ?>

<img src="/images/rock-and-roll.gif" alt="Rock and Roll, Dude!">

<?php endif; ?>

is_page_template()

Как только вы разберетесь с иерархией шаблонов темы, вы, возможно, пожелаете создать ваши собственные шаблоны страниц. is_page_template() позволяет вам таргетиться на текущий шаблон страниц (вне зависимости от того, произвольный он или нет). Вы можете проверить, используется ли какой-либо конкретный шаблон или вообще любой шаблон.

Однако вы должны быть осторожны при поиске определенного шаблона страниц. Т.к. этот тег проверяет наличие имени файла, условие может прекратить работать, если имя шаблона было изменено. Вам нужно будет обновить свой код, чтобы отразить изменения в именах файлов.


<?php

// Add a search form to the Services page template.
if (is_page_template('services.php') ):

?>

<?php get_search_form(); ?>

<?php endif; ?>

Заключение

Это лишь краткое введение в условную логику, которая может быть использована на WordPress сайтах. Условия помогают тщательно настраивать внешний вид и разметку темы, не лишая нас всех преимуществ CMS.

Источник: https://speckyboy.com

Поделиться

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.