Возвращает неотфильтрованный контент поста (под постом подразумевается запись, страница, либо любой другой произвольный тип поста).
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_more_link — позволяет изменить HTML ссылки «Далее»
Как же так, ведь текст кнопки «Далее» можно указать в первом параметре функции 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>'; }