the_excerpt c картинками и регулируемой длиной

Опубликовано 19 января, 2010 в WordPress

В шаблонах WordPress есть 2 варианта вывода тела записи – the_excerpt() (короткая запись) или the_content() (полная запись), первый вариант используется преимущественно в категориях (когда лень расставлять теги more), второй – внутри записи по нажатию на «подробнее» из категории. Часто хочется выводить короткую запись с картинкой, а также регулировать ее длину, но так как чтобы изменить the_excerpt(), нужно копать внутренности самого двига, приходится довольствоваться тем, что есть.

Вот самое простое решение, которое удовлетворит ваше «хочу». Вставляем в functions.php шаблона следующую функцию:

function the_excerpt2($post, $count = 30) {
    if(empty($post)) {
        the_excerpt();
        return false;
    }
    $content = trim(strip_tags($post->post_content));
    $content = explode(' ', $content);
    $content = array_slice($content, 0, $count);
    $content = implode(' ', $content);
    preg_match('/src=\"(.*)\"/Usi', $post->post_content, $img);
    if(!empty($img[1])) $img = '<img align="left" src="'.$img[1].'" width="150" />';
    else $img = '';
    echo $img.'<p>'.$content.' [...]</p>';    return true;
    return true;
}

А теперь во всех шаблонах, где это требуется, заменяем функцию the_excerpt() на the_excerpt2($post, 40), где 40 – это количество слов, которые необходимо выводить в превью.

В итоге получаем:

the_excertp с картинками в wonrdpress

Выводится первая картинка поста, если ее удалось спарсить. Удачи.




Комментарии «the_excerpt c картинками и регулируемой длиной»:
Комментариев: 10. Обязательно оставьте свой!
pistol 19.01.2010 в 14:33

В функции width=150 у картинки – это подстраиваем под себя разумеется, иногда лучше присваивать height
+только сейчас обнаружил, что регулировать длину записи можно только в пределах длины стандартного the_excerpt

pistol 31.01.2010 в 21:35

Небольшое дополнения – если хотите и тег more чтобы учитывался, добавьте в начало функции строки

if(substr_count($post->post_content, '<!--more-->')) {
    $post->post_content = explode('<!--more-->', $post->post_content);
    $post->post_content = $post->post_content[0];
}
RodgerFox 24.03.2010 в 17:13

интересно, а не могли бы вы мне подсказать, что делать . у меня есть скрипт который изменяет размер первого изображения кидает его в кэшь в папке шаблона и после выводит в начале. но! после высвечиваеться картинка которая в этом же посте, получаеться не адекватно. вот код
<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
<img src="<?php bloginfo(‘template_directory’); ?>/timthumb.php?src=<?php echo catch_that_image() ?>&w=500&h=200&zc=1&q=90" alt="<?php the_title(); ?>"/>
</a>
<?php the_content(); ?>
я думал что нужно дописать функции контент некие правила а где увидеть все х3 =\ подскажи как правельно сделать и ещё, можно ли написать дополнение что бы все изображения в посте он менял на опред размер, а то они выходят из поля постов. Большое спасибо.

Игорь 03.02.2011 в 19:55

Спасибо за статью, пригодилась. Только у вас 2 лишняя строчка в коде – 2 раза return true; Хотя конечно, это ни на что не влияет.

Андрей 09.02.2011 в 10:02

Вы не представляете себе как вы меня выручили:) Спасибо за старания.

Сукинсан 18.04.2011 в 18:48

>Небольшое дополнения – если хотите и тег more чтобы учитывался, добавьте в начало функции строки…
Вставил. Тег more стал учитываться, однако все картинки в превью пропали. Есть ли способ сделать так, чтобы и картинки выводились, и тег more работал?

pistol 19.04.2011 в 7:14

Сукинсан, странно, что пропали. Первая картинка должна выводиться. Может, тег img как-то по-особенному оформлен, что его регулярка не видит?

Vicy 21.05.2011 в 15:43

огромное спасибо;)

alltou 16.06.2011 в 15:19

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

Взял данную функцию и подправил под себя :)

Ещё раз спасибо.

Salovyan 01.10.2011 в 13:01

Добрый день!
Извиняюсь,что так влазию,но пользуясь гуглом для поиска проблемы.наткнулся на Вас. Может быть Вы мне сможете помочь?
делаю знакомому фотоблог, и столкнулся со следующей проблемой:
При переходе на страницу поста – у меня нет на нем ничего кроме хедера и футара,которые стоят вообще подряд.
Я думал,что не прописано тело поста в single.php
Но по иее,всё прописано.
При всём этом я в этом слабовато шарю.
не могли бы вы подсказать как быть и что делать?
блог
m-dmitry.ru
страница поста для примера: http://m-dmitry.ru/f11/

Надеюсь на Вашу помощь.

Ваш комментарий: