WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

the_content() WP 0.71

Выводит контент текущего поста (записи).

Тег шаблона, должен использоваться внутри Цикла WordPress или на странице записи (page.php, single.php), в начале которой вызвана функция the_post().

Когда функция используется на страницах архивов (не отдельная страница записи) и если в контенте используется тег-разделитель <!--more-->, то эта функция выведет не весь контент, а только текст до тега <!--more--> с последующей ссылкой "читать дальше" (текст ссылки можно изменить через параметр $more_link_text).

Смотрите также функцию the_excerpt() — получает отрывок контента поста.

Работает на основе: get_the_content()
✈ 1 раз = 0.019477с = тормоз | 50000 раз = 11.65с = медленно | PHP 7.1.11, WP 4.9.6
Хуки из функции
Возвращает

Null. Выводит на экран отформатированный контент записи.

Использование

<?php the_content( $more_link_text, $strip_teaser ); ?>
$more_link_text(строка)
Текст, который будет показан как текст ссылки, вместо '(читать дальше...)'.
По умолчанию: '(читать дальше...)'
$strip_teaser(логический)

Под словом «teaser» понимается привлекающий текст до тега <!--more-->. strip_teaser - значит удалить этот текст. Если установить параметр в true, то контент до тега <!--more--> на странице is_single() будет удален.

Аналогично можно удалить контент до тега more, указав в любом месте кода статьи тег <!--noteaser-->. Обычно его принято указывать сразу после тега <!--more-->.

По умолчанию: false

Примеры

#1 Изменение текста ссылки "читать дальше..."

Если нужно изменить стандартный текст ссылки, который выводится функций, когда контент обрезается по тегу <!--more-->, то укажите необходимый текст в первом параметре функции:

<?php the_content('Перейти к полной статье...'); ?>

#2 Вставка заголовка статьи в текст ссылки "читать дальше..."

Можно использовать Тег шаблона the_title(), чтобы вставить в текст ссылки "читать дальше..." заголовок записи:

<?php the_content( "читать полностью:  " . the_title('', '', false) ); ?>

#3 Изменение поведения функции, относительно обрезки текста по тегу <!--more-->

Если функция не режет текст по тегу <!--more--> или наоборот, режет, где нам это не нужно, то можно изменить переменную $more, тем самым указав функции резать (0) или не резать (1) текст.

<?php 
global $more;    // Объявим переменную $more как глобальную (перед Циклом WordPress).
$more = 0;       // Изменим значение переменной, чтобы показать только текст до тега more.
the_content("More...");
?>

если нужно оставить контент как есть:

<?php 
global $more;
$more = 1;       // игнорируем тег more (не обрезаем).
the_content();
?>

#4 Игнорируем тег "more" для прилепленных записей (sticky)

Этот пример будет выводить весь контент для прилепленных записей (даже если в них есть тег "more"), но остальных записей текст будет обрезаться:

<?php
global $more; // Объявим переменную $more как глобальную.
if( is_sticky() ){
	$more = 1;
	the_content();
}
else {
	$more = 0;
	the_content( 'Read the rest of this entry »' );
}
?>

#5 Альтернативное использование

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

$content = get_the_content();

Однако надо иметь ввиду, что полученный контент (который сейчас в переменной $content) не будет отфильтрован. Чтобы его отфильтровать его нужно "прогнать" через фильтр 'the_content':

$content = apply_filters( 'the_content', $content );
$content = str_replace( ']]>', ']]>', $content );

Список изменений

С версии 0.71 Введена.

Код the content: wp-includes/post-template.php WP 5.3.2

<?php
function the_content( $more_link_text = null, $strip_teaser = false ) {
	$content = get_the_content( $more_link_text, $strip_teaser );

	/**
	 * Filters the post content.
	 *
	 * @since 0.71
	 *
	 * @param string $content Content of the current post.
	 */
	$content = apply_filters( 'the_content', $content );
	$content = str_replace( ']]>', ']]&gt;', $content );
	echo $content;
}

Cвязанные функции

Из метки: loop (Цикл WP)

Еще из раздела: Записи: посты, страницы, ...

Еще из тегов шаблона: Записи: посты, страницы, ...

56 комментов
Полезные 3 Вопросы 1 Все
  • Макс158 wp-panda.com

    $strip_teaser в кодексе выглядит так $stripteaser

    Ответить07.Дек.2013 в 21:11 #
    • Kama7599

      Там ошибка, в коде функции именно $strip_teaser. Кстати, я там периодически встречаю ошибочки, последний раз один параметр описали совсем из другой функции, в какой-то функции из API опций, уже не помню.

      1
      Ответить08.Дек.2013 в 02:46 #
  • Игорь

    Данная функция позволяет использовать внутри контента PHP код?
    У меня почему-то он выводит как текст, а не выполняется..
    Что нужно сделать чтобы он выполнялся) ?

    Ответить07.Янв.2014 в 12:23 #
    • Kama7599

      Нет, не позволяет! Это не так просто, попробуйте использовать материал из этой статьи: http://wp-kama.ru/id_87/ispolnyaemyiy-php-kod-v-zapisyah-wordpress.html

      Но подумайте прежде 10 раз действительно ли вам это нужно, потому что это может стать проблемой и средством вскрыть ваш сайт недоброжелателями...

      Ответить07.Янв.2014 в 16:37 #
      • Игорь

        Большое спасибо!)
        Угрозу безопасности сайту осознаю)

        Ответить07.Янв.2014 в 23:07 #
  • Igor moondeer.cc

    Возвращает

    отформатированный контент записи.

    Не возвращает, а выводит.

    Ответить04.Июл.2014 в 16:11 #
  • Михаил

    Добрый день!
    Подскажите пожалуйста, для чего нужна переменная $strip_teaser, не могу понять((

    Ответить26.Авг.2014 в 12:38 #
    • Kama7599

      Обновил описание в статье:

      Под словом teaser понимается привлекающий текст до тега more. strip_teaser - значит удалить этот текст. Т.е., если установить параметр в true, то контент до тега <!--more--> на is_single() странице будет удален.

      Аналогично можно удалить контент до тега more, указав в любом месте кода статьи тег <!--noteaser-->. (его принято указывать сразу после тега <!--more-->).

      П.С. Спасибо за вопрос! thank_you

      Ответить26.Авг.2014 в 13:39 #
  • Антон

    Ребята, а может ктонибудь сталкивался с таким, что теги html на сформированной странице есть (видны в исходном коде), но браузер весь текст показывает как простыню текста просто. Это только в одной теме, в других работает. Тоесть, дело в теме, но где там искать не могу понять ( . И вообще - как такое возможно! это же брауезр, он же их видит!

    Ответить21.Окт.2014 в 18:30 #
    • Андрей

      Скорее всего, в стилевом файле этой темы оформление html-тегов "сброшено" (то есть написано что-то вроде

      html, body, div, span, applet, object, iframe,
      h1, h2, h3, h4, h5, h6, p, blockquote, pre,
      a, abbr, acronym, address, big, cite, code,
      del, dfn, em, img, ins, kbd, q, s, samp,
      small, strike, strong, sub, sup, tt, var,
      b, u, i, center,
      dl, dt, dd, ol, ul, li,
      fieldset, form, label, legend,
      table, caption, tbody, tfoot, thead, tr, th, td,
      article, aside, canvas, details, embed, 
      figure, figcaption, footer, header, hgroup, 
      menu, nav, output, ruby, section, summary,
      time, mark, audio, video {
      	margin: 0;
      	padding: 0;
      	border: 0;
      	font-size: 100%;
      	font: inherit;
      	vertical-align: baseline;
      }

      а по-новому не задано. Либо удалите нужные теги из перечня "сбрасываемых", либо ниже задайте им свое оформление - отступы, границы и т.д.

      Ответить27.Окт.2014 в 20:25 #
    • Kama7599

      У вас css стили темы подключаются вообще? Похоже что файл стилей не подключен, поэтому нет оформления нужного...

      1
      Ответить28.Окт.2014 в 00:56 #
  • Лариса

    А подскажите, пожалуйста, как проверить, не пустое ли значение возвращает эта функция? То есть есть ли в записи слова? Есть задача написать условие, выводить или содержание записи, или, если оно пустое, определенную надпись.

    Ответить05.Дек.2014 в 14:26 #
    • Андрей

      используйте функцию get_the_content()

      <?php
      $content = get_the_content();
      if ( $content ) {
      
      $content = apply_filters('the_content', $content);
      $content = str_replace(']]>', ']]>', $content);
      echo $content;
      }
      
      else {
      echo "Определённая надпись";
      }
      ?>
      Ответить05.Дек.2014 в 15:00 #
  • Здравствуйте!
    Решил написать фильтр для the_content(), заменяющий в контенте подстроку "foo" на "bar", который также правит содержимое контента и в БД:

    function cont ($cont) {
    	global $wpdb;
    	global $post;
    	$cont = preg_replace("/foo/", "bar", $cont); 
    	$wpdb->update( $wpdb->posts,
    					array( 'post_content' => $cont ),
    					array( 'ID' => $post->ID ) ); //*1*
    	return $cont;
    }
    add_filter('the_content', 'cont');

    Я знаю, что the_content() отвечает лишь за вывод на экран, потому прописал 1. Ожидал, что сразу перед выведением контента в БД произойдёт замена, чтó станет заметно в "wp_posts" и, соотв-но, при обновлении страницы правки записи в админке. Однако и таблица, и админка остались прежними. Почему?
    Заранее спасибо)

    Ответить30.Янв.2015 в 01:40 #
    • Неловко, что поторопился с писаниной сюда: проклацав ещё раз, разобрался с проблемой.smile
      Каждый раз после обновл-я фронт-енда жал в админке "Обновить", ожидая чуда) В этом и была проблема. Чтобы увидеть заменённое знач-е, надо было обновить страницу браузера (на админке || БД). Это же очевидно: запись подменяется при выводе контента, страница админки при этом визуально не изменяется, если страницу браузера не обновить. А при нажатии в этом случае (с неизменёнными в поле правки поста данными) кнопки "Обновить" в админке "bar" опять меняется на "foo". dash2

      Ответить30.Янв.2015 в 02:03 #
      • Kama7599

        Туда-сюда меняли что ли? smile Бывает, и не такое бывает. Обычно в такие моменты нужно отдохнуть smile

        Ответить30.Янв.2015 в 02:16 #
        • Просто не учёл, что событие фронт-энд части не связано с админкой, потому для лицезрения рез-та нужно обновить страницу smile
          А так - Вы правы, в 2 часа ночи не всегда стоит браться за эксперименты))

          Ответить30.Янв.2015 в 20:57 #
  • Рыгор

    Здравствуйте. У меня на блоге изображения внутри поста по умолчанию выводятся ссылкой на полное изображение.
    Я понимаю, что можно при добавлении каждого медиафайла клацать в выпадающем меню Настройки отображения файла - Ссылка - Нет. Но иногда может забыться, да и вообще, может утомить, при большом количестве фото.
    Можно как-то убрать ссылки на полные изображения через the_content, либо в файле /wp-includes/post-template.php ?
    Или может возможно указать чтобы при добавлении медиафайлов уже по умолчанию стояло Настройки отображения файла - Ссылка - Нет ?
    Спасибо.

    1
    Ответить28.Фев.2015 в 20:25 #
    • По поводу установок по умолчанию - можно. За наличие/отсутствие ссылки на медиафайле отвечает параметр image_default_link_type

      Поэтому, разместите в файле функций темы функцию, изменяющую этот параметр и хук-событие after_setup_theme. http://wp-kama.ru/hook/after_setup_theme

      то есть, что-то такое

      function attachment_settings() {
      		update_option( 'image_default_link_type', 'file' );
      }
      add_action( 'after_setup_theme', 'attachment_settings' );

      значение "file" - ссылка, "none" - нет ссылки

      2
      Ответить01.Мар.2015 в 00:16 #
      • Здравствуйте, Andrew! Спасибо за дельный совет!
        Вот только не пойму, почему attachment_settings() вешается именно на хук after_setup_theme, а не, скажем, на init || admin_init. Проверил: и с init, и с admin_init работает. Мне даже кажется, что admin_init наиболее оптимален, т.к. срабатывает лишь для админки, а изображения в ней и грузятся. Зачем дёргать БД при посещении каждой страницы на фронтэнде (при использовании after_setup_theme), если image_default_link_type, как я понял, устанавливает атрибут selected для соотв. option'a в настройках отображения файла в админке?
        Возможно, я что-то упускаю; если да, разъясните, пожалуйста, что.

        1
        Ответить02.Мар.2015 в 23:51 #
  • Рыгор
    К примеру, имеется <img src="">, проверяем наличие, если true то добавляем аттрибут <img id="imagephoto" src"">

    Извиняюсь, что много накоментировалsmile

    Ответить28.Фев.2015 в 20:31 #
    • опять же - можно. С использованием регулярных выражений.

      добавляете к the_content() новый фильтр - функцию, ищущую в контенте картинки и делающую с ними всё, что нужно.

      фильтр добавляется так

      add_filter('the_content', 'image_process', 100);

      где image_process - имя функции, которую нужно написать smile

      Есть хороший плагин WP Image SEO, который добавляет к картинкам alt и title. Можно посмотреть, как там всё происходит и доработать его под себя.

      1
      Ответить01.Мар.2015 в 00:27 #