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

the_content() WP 0.71

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

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

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

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

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

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

<?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.2.4

<?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

    Ответить5.9 лет назад #
    • Kama7629

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

      1
      Ответить5.9 лет назад #
  • Игорь

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

    Ответить5.8 лет назад #
    • Kama7629

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

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

      Ответить5.8 лет назад #
      • Игорь

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

        Ответить5.8 лет назад #
  • Igor moondeer.cc

    Возвращает

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

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

    Ответить5.3 лет назад #
  • Михаил

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

    Ответить5.1 лет назад #
    • Kama7629

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

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

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

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

      Ответить5.1 лет назад #
  • Антон

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

    Ответить5 лет назад #
    • Андрей

      Скорее всего, в стилевом файле этой темы оформление 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;
      }

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

      Ответить5 лет назад #
    • Kama7629

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

      1
      Ответить5 лет назад #
  • Лариса

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

    Ответить4.9 года назад #
    • Андрей

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

      <?php
      $content = get_the_content();
      if ( $content ) {
      
      $content = apply_filters('the_content', $content);
      $content = str_replace(']]>', ']]>', $content);
      echo $content;
      }
      
      else {
      echo "Определённая надпись";
      }
      ?>
      Ответить4.9 года назад #
  • Здравствуйте!
    Решил написать фильтр для 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" и, соотв-но, при обновлении страницы правки записи в админке. Однако и таблица, и админка остались прежними. Почему?
    Заранее спасибо)

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

      Ответить4.7 года назад #
      • Kama7629

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

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

          Ответить4.7 года назад #
  • Рыгор

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

    1
    Ответить4.6 года назад #
    • По поводу установок по умолчанию - можно. За наличие/отсутствие ссылки на медиафайле отвечает параметр 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
      Ответить4.6 года назад #
      • Здравствуйте, 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
        Ответить4.6 года назад #
  • Рыгор
    К примеру, имеется <img src="">, проверяем наличие, если true то добавляем аттрибут <img id="imagephoto" src"">

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

    Ответить4.6 года назад #
    • опять же - можно. С использованием регулярных выражений.

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

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

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

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

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

      1
      Ответить4.6 года назад #
Здравствуйте, !     Войти . Зарегистрироваться