the_content() — выводит контент поста

Функция возвращает содержимое текущего поста. Работает только в цикле.

the_content( $more_link_text = null, $strip_teaser = false)
$more_link_text
(строка) В этом параметре можно указать текст ссылки «Далее». Читайте также о других способах изменения текста ссылки.
$strip_teaser
(логическое) Нужно ли в полной версии пост обрезать то, что находится перел тегом <--more-->? true — нужно, false — не нужно.

Выводит полностью весь пост, если задействована на страницах:

  • записей single.php,
  • страниц page.php,
  • произвольных типов постов single-{тип_поста}.

Выводит только часть контента поста, которая находится до тега <!--more--> на следующих типах страниц:

  • рубрики category.php,
  • метки tag.php,
  • архивы archive.php,
  • таксономии taxonomy.php.

Что делать, если у вас выводится полный текст поста, а вы хотите выводить анонсы со ссылкой «Далее»?

Всё, что нам потребуется сделать, это:

  • Непосредственно перед циклом определить глобальную переменную $more.
    global $more;
  • Затем, уже непосредственно перед функцией the_content() присвоить ей значение 0 (отображать анонсы) или 1 (отображать целиком весь пост):
    $more = 0; // 0 - отобразить часть контента то тега more, 1 - отобразить весь контент

Пример:

global $more;
while( have_posts() ) : the_post();
	$more = 1; // отображаем полностью всё содержимое поста
	the_title(); // эта функция выводит заголовок
	the_content(); // выводим контент
endwhile;

Читайте также описание функции the_title().

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

global $more;
while( have_posts() ) : the_post();
	if( is_sticky() ) : // проверяем, является ли текущая запись прилепленной
		$more = 1; // полный пост
	else :
		$more = 0; // анонс
	endif;
	the_title(); // заголовок
	the_content('Подробнее &rarr;'); // контент
endwhile;

Как вывести содержимое конкретного поста, зная его ID?

В отличие от функций get_the_title() и get_permalink() функции для вывода контента поста не имеют параметра с ID поста, так что нам не удастся получить или вывести контент какого-либо определенного поста вне цикла этим способом.

Другой способ — функция get_post().

$my_post_obj = get_post( $my_post_id ); // параметр функции - ID поста, содержимое которого нужно вывести
echo $my_post_obj->post_content;

В этом примере (который выше) у нас выведется неотфильтрованный контент — в том самом виде, в котором он находится в базе данных. Так как очень многие плагины в WordPress применяют свои фильтры к контенту постов, то такой способ хорош, если вы хотите обойти этот фильтр.

Если фильтр the_content в данном случае вам нужен, тогда наш пример изменится следующим образом:

$my_post_obj = get_post( $my_post_id );
$the_content_filtered = apply_filters( 'the_content', $my_post_obj->post_content );
echo str_replace( ']]>', ']]&gt;', $the_content_filtered );

Фильтры

the_content_more_link — позволяет изменить кнопку «Далее»

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

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

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

the_content — изменяем содержимое поста перед выводом

Как я уже говорил, этот фильтр очень популярен и используется во многих плагинах. Его даже используют для добавления ссылок на похожие записи в конце поста.

function true_related_posts_after_content( $content ) {
	$related_posts = ''; // предположим, что это какой-то код, например код для вывода похожих записей
	return $content . $related_posts; // добавляем сразу после содержимого поста
}
 
add_filter( 'the_content', 'true_related_posts_after_content', 10, 1 );
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.