Просмотров: 5 327

Как поставить ограничение на количество выводимых символов для функции the_content в WordPress.

Те, кто создает или правит шаблоны для WordPress знают, что функция the_content в WordPress выводит все содержимое записи или страницы.

Иногда, например, при выводе записей на главной странице, нужно вывести не всю запись целиком, а лишь какую-то ее часть. Нужно поставить ограничение для функции the_content.

Но, проблема в том, что по умолчанию в WordPress такой возможности нет.

Можно, конечно, воспользоваться функцией the_expert, но здесь другая проблема, она обрезает все изображения и теги, остается только текст.

Как быть?

Хочу поделиться решением, которое нашел на одном буржуйском сайте.

http://bavotasan.com/2009/limiting-the-number-of-words-in-your-excerpt-or-content-in-wordpress/

В общем, вот, что нужно сделать.

Шаг 1. В файле functions.php нужно добавить следующую функцию:

function content($limit) {
  $content = explode(' ', get_the_content(), $limit);
  if (count($content)>=$limit) {
    array_pop($content);
    $content = implode(" ",$content).'...';
  } else {
    $content = implode(" ",$content);
  }           
  $content = preg_replace('/\[.+\]/','', $content);
  $content = apply_filters('the_content', $content);
  $content = str_replace(']]>', ']]>', $content);
  return $content;
}

Шаг 2. В том месте шаблона, где нужно вывести обрезанный the_content, нужно добавить такую строку кода:

echo content(80);

здесь 80 – это количество символов, которые должны выводиться.

Это нужно написать вместо функции

the_content();

Давно мучился с этой проблемой, наконец, удалось решить. Спасибо  сайту bavotasan.com.

Напоследок, предлагаю вашему вниманию свой бесплатный миникурс по созданию минимальной темы на WordPress. Вот ссылка, если вам это интересно.

  • Борис

    Может быть Вы сталкивались с задачей как вывести не весь контент, а только ту часть, которая после тега more, т.е. после анонса? Похоже, надо использовать идею, как в Вашем случае. Т.е. считать сколько букофф в цитате, как-то отнимать от всего контента… Да, еще при таком подходе, наверно будет важно прописана цитата или вордпресс автоматом берет её написанного до more..
    Вот тока программист я никакой…

    • admin

      Борис, мне просто интересно, а зачем выводить часть текста, которая после тега more? Задача этого тега, наоборот спрятать то содержимое, которое находится после него, а Вы хотите наоборот, показывать его. Может быть для решения Вашей проблемы подойдет какой-то другой, более приемлемый вариант?

      • Борис

        Да, если точнее, то мне надо на странице вывести после анонса рекламу, а после нее оставшуюся часть текста. Можно, конечно, в каждом посте писать свою цитату отличную от начала поста, тогда реализовать можно поставив

        the_expert
        Реклама
        the_content

        но если постов много уже, то это гемор..

        • admin

          А если вставить рекламу в саму запись и выводить на главной не анонс, а полностью весь текст записи?

          • Борис

            Нее, так неинтересно. 🙂

  • http://vk.com/id35598400 Evgeny Mikhalyov

    В каком файле находиться «the_content();» для главной страницы?

    • admin

      Все будет зависеть от того шаблона, который Вы используете и от того, главная страница у Вас статическая страница или список постов.

      Чаще всего это файл, в котором реализуется сам цикл. Это может быть content-single.php, или content.php. Все будет зависеть от Вашего шаблона.

  • Андрей

    Добрый день!
    Прошу помощу и проффесионалов. Я создал отдельный шаблон для постов но на нем не работает пагинация, не выводится.
    Вот код:

    have_posts()) : $the_query -> the_post(); ?>
    <article id="post-» >

    <a href="» rel=»bookmark»>

    <?php edit_post_link( __( 'Edit', 'twentythirteen' ), '’, » ); ?>

    » . __( ‘Pages:’, ‘twentythirteen’ ) . », ‘after’ => », ‘link_before’ => », ‘link_after’ => » ) ); ?>

    <?php comments_popup_link( '’ . __( ‘Leave a comment’, ‘twentythirteen’ ) . », __( ‘One comment so far’, ‘twentythirteen’ ), __( ‘View all % comments’, ‘twentythirteen’ ) ); ?>


    Может кто подскажет как сжделать правильно?