get_the_title() — возвращает заголовок поста

Функция возвращает заголовок поста, ID которого передан в параметрах, если же ID не указан, возвращается заголовок текущей записи в цикле.

Смотрите мой видеоурок про циклы WordPress.

Если запись защищена паролем, то перед заголовком добавляется «Защищено: », меняется хуком protected_title_format если пост помечен как личное, тогда префикс заголовка будет «Личное: », меняется хуком private_title_format.

get_the_title( $post = 0 )

Параметры

$post
(целое число|WP_Post) ID или объект поста, заголовок которого нужно получить, по умолчанию — текущий пост в цикле.

Очистка

Важный момент, про который вы должны помнить. Вывод функции get_the_title() никак не чистится, кроме использования в некоторых местах в админке (об этом ниже), это означает, что если например в заголовок записи вы закинете JavaScript, например <script>alert( 'Привет' );</script>, то этот код будет выполняться везде, где выводится заголовок.

Поэтому, в зависимости от ситуации, рекомендую вам рассмотреть возможность использования:

echo esc_html( get_the_title() );

либо, если в заголовке могут присутствовать HTML-теги, то:

echo wp_kses_post( get_the_title() );

Пример 1. Как вывести заголовок текущего поста в цикле

При использовании внутри цикла WordPress никакие параметры передавать не нужно:

echo '<h2>' . get_the_title() . '</h2>';

Пример 2. Как вывести заголовок конкретного поста

echo get_the_title( 531 ); // выводим заголовок поста с ID 531

или:

$specific_post = get_post( 531 );
echo get_the_title( $specific_post );

Пример 3. Создаём хлебные крошки с выводом заголовка страницы

echo '<div class="breadcrumb">';
 
	// получаем заголовок родительского поста
	$parent_title = get_the_title( $post->post_parent );
 
	// если заголовок не равен заголовку текущего поста, то выводим ссылку на родителя
	if ( $parent_title != the_title( ' ', ' ', false ) ) {
		echo '<a href="' . esc_url( get_permalink( $post->post_parent ) ) . '" title="' . esc_attr( $parent_title ) . '">' . esc_html( $parent_title ) . '</a> » ';
	}
 
	// и выводим заголовок текущего поста
	echo get_the_title();
 
echo '</div>';

the_title

Этот фильтр-хук – основное отличие между выводом заголовка функцией get_the_title() и выводом напрямую из объекта поста $post->post_title.

На этот фильтр накладываются некоторые функции, а именно:

  • В первую очередь происходит автоматическая замена кавычек и других символов функцией wptexturize().
  • Затем происходит замена символа & на &amp;.
  • После применяется обычная PHP-функция trim(), которая удаляет пробелы по краям заголовка.
  • Ещё применяется функция capital_P_dangit(), исправляющая неправильное написание WordPress (WordPress, wordpress, вротпресс и т д).
  • Также в админке WordPress происходит ещё и очистка функцией esc_html().

Например, ну не знаю, давайте добавим ID поста в конце каждого заголовка в скобочках!

add_filter( 'the_title', 'true_custom_title_stuff', 25, 2 );
 
function true_custom_title_stuff( $title, $post_id ) {
 
	return $title . ' (' . $id . ')';
 
}

Не знаете, куда вставлять код?

protected_title_format

Позволяет изменить именно шаблон вывода заголовка поста, если запись защищена паролем.

По умолчанию – либо Защищено: %s для русской локализации, либо Protected: %s. %s, как можно догадаться впоследствии заменяется текстом заголовка.

Например можем попробовать сделать такой формат: %s (защищена паролем)

add_filter( 'protected_title_format', 'true_protected_title_format', 25, 2 );
 
function true_protected_title_format( $format, $post ) {
 
	// мы можем использовать тут объект поста $post для каких-то доп. условий
	return '%s (защищена паролем)';
 
}

Не знаете, куда вставлять код?

private_title_format

Позволяет изменить именно шаблон вывода заголовка поста, если запись отмечена как «Личное». По умолчанию – либо Личное: %s для русской локализации, либо Private: %s.

Поменяем так же, как и в предыдущем примере, но только для страниц:

add_filter( 'private_title_format', 'true_private_title_format', 25, 2 );
 
function true_private_title_format( $format, $post ) {
 
	if( 'page' === get_post_type( $post ) ) {
		return '%s (личное)';
	}
	return $format;
 
}

А можно и вовсе избавиться от этих надписей:

add_filter( 'private_title_format', 'true_no_private_title_format' );
 
function true_no_private_title_format( $format ) {
 
	return '%s';
 
}

Не знаете, куда вставлять код?

Миша

Недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.