WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

the_content() WP 0.71

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

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

Когда функция используется на страницах архивов (не отдельная страница записи) и если в контенте используется тег-разделитель <!--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 );

Код the_content: wp-includes/post-template.php VER 5.0.1

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

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

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

55 комментов
Полезные 3 Вопросы 1 Все
  • Добрый день.
    Есть плагин, передающий новые записи из WordPress на форум smf, но он передаёт весь контент записи целиком.
    Подскажите, как сделать, что бы контент записи для обработки (как в пятом примере) обрезался по тегу ?
    Сейчас вот такой код:

    if(get_option('charset') == 'UTF8'){
    	$body = $queried_post -> post_content;
    }else{
    	$body = utf8_encode($queried_post -> post_content);
    }
    
    $body = apply_filters('the_content', $body);
    $body = str_replace(']]>', ']]>', $body);
    
    $body = '[html]'.$body.'[/html]';
    
    Ответить6 мес назад #
    • перед применением фильтра разделите $body функцией explode(), где разделителем укажите тег <!-- more --> (или только его первую часть <!--) и далее работайте с первым элементом полученного массива:

      if(get_option('charset') == 'UTF8'){
      	$body = $queried_post -> post_content;
      }else{
      	$body = utf8_encode($queried_post -> post_content);
      }
      
      $explode = explode("<!--", $body);
      
      $body = apply_filters('the_content', $explode[0]);
      
      $body = str_replace(']]>', ']]>', $body);
      
      $body = '[html]'.$body.'[/html]';
      
      2
      Ответить6 мес назад #
  • Спасибо, всё работает.
    Чуть-чуть ещё обнаглею smile , подскажите как в передаваемую запись вставить текст со ссылкой на эту запись после тега "More"

    Ответить6 мес назад #
    • при обработке тега more WordPress вставляет на его место закладку (якорь) 'more-' с ID поста

      <a name="more-VXYZ"></a>

      поэтому добавляете к пермалинку знак решетки с именем якоря и всё.

      $permalink = get_permalink($queried_post->ID) . '#more-' . $queried_post->ID;
      1
      Ответить6 мес назад #
      • А куда, в какое место вставить эту строку с пермалинком в код в Вашем предыдущем сообщении?

        Ответить6 мес назад #
        • туда, где хотите, чтобы отображалась ссылка. Например, в конец передаваемого сообщения.

          $body = str_replace(']]>', ']]>', $body);
          
          // создаем ссылку с more
          
          $permalink = get_permalink($queried_post->ID) . '#more-' . $queried_post->ID;
          
          // добавляем в конец 
          $body .= " [<a href=\"$permalink\">Читать далее</a>]";
          
          //
          
          $body = '[html]'.$body.'[/html]';
          2
          Ответить6 мес назад #
  • Сергей Верещагин

    Доброе утро. Как сделать чтобы добавить в контент отдельную запись? Вот допустим: <div><span>Tweet</span><?php the_content('...'); ?></div> тег span нужен в сам контент добавить как то.В браузере отобразится так <span></span><p></p> Вот хочется чтобы чтобы <span> был внутри тега <p>.

    Ответить2 мес назад #
  • Тупой вопрос: как мне вывести content, отфильтровав (убрав) шорткоды в записи? (на странице записи single.php)

    Ответить2 мес назад #
    • campusboy3080 cайт: www.youtube.com/c/wpplus
      add_filter('the_content', 'remove_shortcode_from_single');
      function remove_shortcode_from_single( $content ) {
      	return is_single() ? strip_shortcodes( $content ) : $content;
      }
      1
      Ответить2 мес назад #
  • Не сработалоsad
    Видимо, это должно работать в цикле?
    А на сингл же цикла нет

    Ответить2 мес назад #
    • campusboy3080 cайт: www.youtube.com/c/wpplus

      Попробуй убрать проверку тогда smile И добавить приоритет пораньше.

      add_filter('the_content', 'remove_shortcode_from_single', 9);
      function remove_shortcode_from_single( $content ) {
      	return strip_shortcodes( $content );
      }
      Ответить2 мес назад #
      •  <?php
        		add_filter('the_content', 'remove_shortcode_from_single', 9);
        function remove_shortcode_from_single( $content ) {
        	return strip_shortcodes( $content );
        }
        		echo $content ;
        		?>

        На фронте - ничего dash

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