Настраиваем вывод последних комментариев на вордпресс. Без плагинов.

Прошлую статью про старкрафт местная аудитория встретила никак, а на топсапе вообще закидали какашками и выпилили из ридера. А меж тем я продолжаю настаивать, что если играть, то в игры способствующие развитию. 100% моих знакомых, о ком я знаю, что они уважают старкрафт, успешные и/или талантливые люди. Но это я так, неприятно просто было.

Перейду же к статье. Она будет полезна всем, кто юзает вордпресс, и кто хотел бы внести больше разнообразия в его структуру/дизайн.

Итак вывод последних комментариев.
Обычно его втыкают в сайдбар, с помощью соответствующего виджета.
Но получающийся результат обычно слегка уныл, да и ссылки пусть и в ноуфолов, выводить в сайдбаре не хочется, поэтому вывод комментов чаще отключают. И я отключал. Но на днях заценил один сервис покупки комментариев, мне понравилось и я решил, что не помешает их вывести в сайдбар.
И в общем погуглил немного, нашел пару функций, скомпилировал их, переписал три четверти кода, исправил пару смысловых ошибок, воткнул получившуюся процедуру на половину своих СДЛ и чертовски рад.

Итак функция умеет выводить нужное количество комментариев. Выводить или не выводить заголовок статьи. Выводить или не выводить заданное количество символов, при чем без обрезки слов. Эти три параметра задаются при обращении к процедуре.

В самом коде можно оставить или удалить ссылки с заголовка или текста комментария и настроить форматирование. Я на одном сайте, например, оформил вывод в виде цитат экспертов. Круто вышло. ))

function last_comments ($number=10, $length=100, $title=true) { 
//базовые значения. То есть функцию можно вызывать даже не указывая параметров.
$args = array (
'number' => $number,
'status' => 'approve',
);
$comments = get_comments($args);
echo '<ul>'; //комменты будем выводить списком. При желании можно выводить любым иным способом.
foreach($comments as $comment) :
 
// класс будет recentcomments. Он обычно задан в шаблоне для вывода последних комментов. 
// Но я все равно втыкаю процедуру в див, которому задаю новый класс и всячески его настраиваю.
echo '<li class="recentcomments">' . $comment->comment_author; //имя автора. Можно окружить тегами strong или любыми другими. 
//Ссылка на сайт не выводится, можно конечно прикрутить, но думаю чаще стоит задача не отображать ее.
 
//Далее ссылка на статью. При желании можно оставить только заголовок статьи или перенести код в другое место, например после текста коммента.
if ($title) {echo ' комментирует запись <a href="' . get_permalink($comment->comment_post_ID) . '">' .get_the_title($comment->comment_post_ID). '</a>';}
// Можно написать другую фразу вместо "комментирует запись", можно изменить форматирование, 
//можно удалить ссылку оставив только echo (get_the_title($comment->comment_post_ID)); все можно.
 
//собственно текст комментария и ссылка на него. 
if ($length>0){ //проверяем параметры. Если на входе подать ноль на длину, то будет обычный вывод комментов без текста.
$comment_content_short = strip_tags($comment->comment_content); //обрезаем теги.
$end =false; //задаем второстепенный параметр. Определяет весь ли комментарий влез в отведенную длину.
if (strlen($comment_content_short)<$length) { //Проверяем длину коммента.
$end = true;
$comment_content_short=$comment_content_short.' ';} // Если коммент короткий, то прикручиваем в конце знак пробела.
//Он нужен дальше. 
//В исходной функции никаких условия с длиной вообще не было. И когда коммент был коротким или однословным, 
//то получалось некрасиво.
$comment_content_short = substr($comment_content_short, 0, $length); //ограничиваем объем по длине.
echo '<br /><a href="' . get_comment_link($comment->comment_ID) . '">' . substr($comment_content_short, 0, strrpos($comment_content_short, ' ')); 
// br можно убрать. =)
//Функция substr берет фрагмент от начала и до последнего пробела. Чтобы обрезки слов не захватывать. 
//Но если коммент короче параметра length, то могла возникнуть ситуация, 
//когда отбрасывается последнее слово, так как последний пробел был перед ним. 
//Именно для того, чтобы это избежать, мы прикрутили пробел чуть выше.
// Тут так же можно удалить ссылку, оставив только текст. И хотя обычно я удаляю, 
//но ломать не строить, поэтому оставил код, вдруг кто-то будет юзать в таком виде.
if ($end==false){echo '...';} //Если коммент длиннее параметра length, то тыкаем многоточие. 
//Вместо многоточия можно воткнуть что-то типа "читать полностью", 
//так же можно отрывающий а-тег воткнуть тут, чтобы весь коммент не был ссылкой.
echo '</a>' ;}
// конец текста коммента.
 
echo '</li>';
		endforeach;
		echo '</ul>';
}

В общем-то я ее все закомментил и думаю ясно.
Функцию закидываем в файл функций, хехе. Этот файл обязательно открываем в нотепад++ (или другом многофункциональном редакторе), меняем кодировку на «utf-8 (без BOM)» и заливаем обратно. Это нужно из за использования кириллицы в функции, можно и не менять кодировку, если удалить слова «комментирует запись» из кода.

В месте, где хотим видеть список комментов, вызываем функцию.

last_comments(10,100,true);

Можно без параметров, тогда подставятся те же самые 10,100,true. Можно что-нибудь типа (5,0,true) тогда будет вывод пяти комментариев без текста комментариев, но с заголовками статей. Можно (15, 150, false), тогда будет 15 комментов обрезанных до 150 символов. Без названий статей.

В общем всяко можно. Это крутая многофункциональная функция. Не поленитесь разобраться в ней.
Если че пишите.


Автор: Elsper.ru


VN:F [1.9.14_1148]
Rating: 4.1/10 (7 votes cast)
Настраиваем вывод последних комментариев на вордпресс. Без плагинов., 4.1 out of 10 based on 7 ratings

10 thoughts on “Настраиваем вывод последних комментариев на вордпресс. Без плагинов.

  1. Я считаю что прошлая статья про Старкрафт была просто ахуэ, хоть я в него и не играю. Почаще пиши такие «жизненные» вещи. Реально был удивлен тем, что ты научил свою девушку играть в старик, и связал все это с умственным развитием.

    Читаю тебя в ленте в обязательном порядке.

  2. Мда, за SC2 я тоже какашечку кинул бы.
    Собственно CS2 сам по себе кака 🙂
    Вот первый был игрой…

  3. А как добавить аватары для комментирующих? И как то можно осуществить скроллинг этих комментариев?

  4. Аватары через gravatar можно. Надо поразбираться, погуглить, как они в обычных комментах идут и просто приделать эту часть в вывод.
    А скроллинг это уже JavaScript с асинхронной подгрузкой. Так, что тоже надо разбираться.

  5. Добрый день! А как сделать так, чтобы при нажатии на ссылку коммент не переходил на страницу новости, где располагается этот коммент (уже полный, а не обрезанный), а сразу раскрывал коммент в полный рост.
    Просто я как хочу сделать, все комментарии в какой нибудь записи сжатые (обрезанные), нажимаешь на него и он раскрывается на этой же старнице

  6. Если указать через настройки чтения что бы выводить например 3 поста на страницу главная смотрится просто супер, именно то что я хотел бы, но если потом зайти в рубрики разные то там получается тоже по 3 постав выводит и получается очень много страниц. Вопрос в том, как сделать что бы на главной были 3 последние записи, а в рубриках выводилось например по 10 постов на страницу?

  7. При выводе статичной страницы wordpress прекрасно показывает всё, что написано в html, включая bootstrap. Как только переключаешь на вывод последних записей, wordpress перестает реагировать на html, включая простейшие теги типа .

  8. Я не до конца понял вашу проблему, но хочу обратить ваше внимание на то, что для вывода записей часто в шаблоне может использоваться функция the_content()
    Она выводит отформатированный, «очищенный» текст поста.

    Я мог бы посоветовать вам найти этот фрагмент в шаблоне, попробовать заменить его на get_the_content() и посмотреть, что получится.

    Сам я ничего не пробовал.
    И вообще мой блог не специализируется на WP, но в целом мне не лень поделиться информацией, поэтому ответил.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Спoнcopcкиe ссылки