Фильтрация wp_title: почему это важно

Фильтрация wp_title: почему это важно

filters

Любой, кто имел опыт в создании тем – пусть даже всего лишь одной темы, – работал с дочерними темами или просто редактировал базовую тему, скорее всего, сталкивался с wp_title. Это один из тегов в WordPress, который очень легко использовать и понять. Давайте приведем цитату из Кодекса:

Отображает или возвращает заголовок страницы. Может быть определен разделитель, который выводится либо до, либо после заголовка страницы.

Этот тег может стоять в любом месте в шаблоне за пределами цикла главной страницы, однако обычно он используется в элементе title раздела head страницы.

Ничего сложного, верно?

Однако это один из тех тегов, которыми часто злоупотребляют, что приводит к проблемам, связанным с плагинами.

Вопросы фильтрации wp_title

Во-первых, стандартные ситуации использование wp_title очень просты. Достаточно добавить этот тег, объявить разделитель, а также задать вывод заголовка и разделителя.

К примеру:

<title><?php wp_title( ‘|’, true, ‘right’ ); ?></title>

Достаточно просто – однако на практике все может быть гораздо хуже (что я знаю из личного опыта).

Не повторяем ошибок

К примеру, допустим, вы хотите создать более продуманный формат вывода заголовков в вашем блоге.

Вы можете воспользоваться подобной конструкцией:

<title><?php bloginfo('name'); ?> | <?php is_home() ? bloginfo('description') : wp_title( '' ); ?></title>

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

Проблема здесь заключается в том, что вы не в состоянии отфильтровать wp_title. Это означает, что разработчики плагинов, которые предлагают изменить структуру заголовков вашей темы, не смогут это сделать, поскольку вы не используете надлежащим образом wp_title.

Взамен вы получаете мешанину из wp_title, get_bloginfo и конкатенации строк для получения необходимой структуры. Хорошее эмпирическое правило в программировании – по крайней мере, в контексте некоторых фреймворков и приложений – гласит: если ваше решение кажется вам странным, значит существует более простой (и эффективный) способ сделать это.

Идем правильным путем

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

Здесь я подразумеваю, что мы не будем использовать комбинацию «blog info»-функций – мы воспользуемся стандартными преимуществами WordPress: событийной парадигмой.

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

Для начала нам нужно определить, как именно должен выводиться заголовок с помощью базовой функции wp_title.

<title><?php wp_title( '|', true, 'right' ); ?></title>

Далее нам нужно определить функцию, подцепить ее к wp_title и обеспечить код, который требуется для фильтрации информации:

<?php
 
/**
 * Provides a standard format for the page title depending on the view. This is
 * filtered so that plugins can provide alternative title formats.
 *
 * @param       string    $title    Default title text for current view.
 * @param       string    $sep      Optional separator.
 * @return      string              The filtered title.
 * @package     mayer
 * @subpackage  includes
 * @version     1.0.0
 * @since       1.0.0
 */
function mayer_wp_title( $title, $sep ) {
	global $paged, $page;
 
	if ( is_feed() ) {
		return $title;
	} // end if
 
	// Add the site name.
	$title .= get_bloginfo( 'name' );
 
	// Add the site description for the home/front page.
	$site_description = get_bloginfo( 'description', 'display' );
	if ( $site_description && ( is_home() || is_front_page() ) ) {
		$title = "$title $sep $site_description";
	} // end if
 
	// Add a page number if necessary.
	if ( $paged >= 2 || $page >= 2 ) {
		$title = sprintf( __( 'Page %s', 'mayer' ), max( $paged, $page ) ) . " $sep $title";
	} // end if
 
	return $title;
 
} // end mayer_wp_title
add_filter( 'wp_title', 'mayer_wp_title', 10, 2 );

Мало того, что вы получите все преимущества, упомянутые выше – вы также сделаете это корректно.

И, как и первый пример, этот код взят из моего проекта, над которым я работаю прямо сейчас.

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

Таким образом, код выше не является идеальным – возможно, в нем можно что-либо улучшить. Критика приветствуется!

Источник: tommcfarlin.com

Сохранено из oddstyle.ru

Добавить комментарий

%d такие блоггеры, как: