get_the_content() — возвращает контент поста

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

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

get_the_content( $more_link_text = null, $strip_teaser = false, $post = null )

Параметры

$more_link_text
(строка) Позволяет установить собственный текст ссылки перехода к полной версии поста. По умолчанию анкор ссылки в русской версии WordPress — (далее...).
$strip_teaser
(логическое) Влияет на то, как отображается полная версия контента (то есть то, что обычно находится в single.php):

  • false — по умолчанию полная версия содержимого поста выводится как обычно.
  • true — в этом случае в полной версии поста будет отсутствовать часть контента, которая находится до тега <!--more-->.
$post
(целое|WP_Post) ID или объект поста, контент которого мы хотим получить. По умолчанию – текущий пост в цикле. Параметр появился в WP 5.2.

Пример 1. Выводим контент страницы без фильтров

$content_no_filter = get_the_content( 'Перейти к посту...' );
echo $content_no_filter;

Главное отличие функции get_the_content() от the_content() не в том, что первая функция возвращает результат, а вторая выводит, а в том, что the_content() применяет огромное количество действий на фильтр the_content – там и интерпретация шорткодов, и замена кавычек и многое другое.

Пример 2. Как записать в переменную отфильтрованый контент

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

$content_no_filter = get_the_content(); // содержимое поста (текущего в цикле) из базы
$content = apply_filters( 'the_content', $content_no_filter ); // применяем фильтр the_content

Либо буферизацию на функцию the_content():

ob_start();
the_content();
$content = ob_get_contents(); // переменная $content теперь содержит контент записи
ob_end_clean();

Пример 3. Вывод содержимого записи/страницы с определённым ID

До версии WordPress 5.2 нам нужно было придумывать что-то в этом роде:

$post_id = 5; // пост с определённым ID
$post = get_post( $post_id );
$content = apply_filters('the_content', $post->post_content);

Теперь же всё изменилось с приходом третьего параметра в функцию:

$post_id = 5;
$content = get_the_content( null, false, $post_id );

Глобальные переменные

Функция кстати работает со следующими глобальными переменными:

$page
(целое) Номер подстраницы при разделении поста по подстраницам тегом <!--nextpage-->
$more
(логическое) Нужно ли отображать целиком пост или только отрывок до тега <!--more-->. Подробное описание этой глобальной переменной в примере.
$pages
(массив) Массив контента каждой из подстраниц контента поста, разделённых тегом <!--nextpage-->.
$multipage
(логическое) Существует ли разделение контента на подстраницы.

Как же так, ведь текст кнопки «Далее» можно указать в первом параметре функции the_content()? Дело в том, что там вы можете указать только текст ссылки, а фильтр the_content_more_link позволяет полностью изменить её HTML код.

В качестве примера добавим к ссылке «Далее» HTML-атрибут target="_blank".

add_filter( 'the_content_more_link', 'true_target_blank_to_read_more', 25, 2 );
 
function true_target_blank_to_read_more( $more_link, $more_link_text ) {
	// Параметры, передаваемые из фильтра, сейчас мы их не будем использовать
	// $more_link_text - текст ссылки по умолчанию
	// $more_link - HTML ссылки по умолчанию
	return ' <a href="' . get_permalink() . '#more-' . get_the_id() . '" target="_blank">Подробнее →</a>';
}
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии