Топ комментаторов без плагина за 5 минут

Комментаторы апреляДобрый день, друзья! В начале месяца я запустила конкурс «Комментатор месяца» и установила виджет Топ комментаторов, так как без него конкурс провести трудно.

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

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

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

Но благодаря подсказке Юлии, хозяйке блога bubuchinka.ru, мне удалось решить эту проблему. Дело было в том, что я использовала виджеты в сайдбаре и добавить между ними код было нельзя. К счастью решение нашлось, но обо всем по порядку.

Топ комментаторов без плагина

Нам нужно будет внести изменения в следующие файлы: functions.php, style.css и sidebar.php.  Если вы захотите вставить топ в подвал темы, то вам понадобится файл footer.php.

Очень советую сохранить сначала все  эти файлы себе на компьютер, чтобы легко можно было все восстановить, если что-то пойдет не так.

1. Сначала в файл functions.php перед закрывающим тегом ?> вставляем код:

 FUNCTION sp_top_commentator(){ 
global $wpdb; 
$length = 9; // количество символов 
$month = true; // периодичность обновления 
$comment = true; // показатель комментариев 
$nofollow = true; // индексация комментариев 
$count = 4; // количество комментаторов 
$col = 2; // число столбцов 
$avatarSize = 70; // размер аватара 
$exceptionEmail = 'evgeniyakuvarina@gmail.com'; // исключение адреса 
$results = $wpdb->get_results(' 
SELECT 
COUNT(comment_author_email) AS comments_count, comment_author_email, comment_author, comment_author_url 
FROM 
(select * from '.$wpdb->comments.' order by comment_ID desc) as pc 
WHERE 
comment_author_email != "" AND 
comment_type = "" AND 
comment_approved = 1 AND 
comment_author_email NOT IN ('.preg_replace('/([\w\d\.\-_]+@[\w\d\.\-_]+)(,? ?)/','"\\1"\\2',$exceptionEmail).')'. 
($month ? 'AND month(comment_date) = month(now()) AND year(comment_date) = year(now())' : ''). 
'GROUP BY 
comment_author_email 
ORDER BY 
comments_count DESC 
LIMIT '.$count 
); 
$output = "<div class='top-comment'><table width='100%'><tr align='center' valign='top'>"; 
$i = 0; 
foreach($results AS $result){ 
IF ($i>=$col) { 
$output .= "</tr><tr align='center' valign='top'>"; 
$i = 0; 
} 
$i++; 
$output .= "<td><div class='avatar-top'>".get_avatar($result->comment_author_email,$avatarSize)."</div><div class='avatar-comment'>"; 
IF ($length AND $length<mb_strlen($result->comment_author)) $result->comment_author = trim(mb_substr($result->comment_author, 0, $length)).'.';
IF ($result->comment_author_url)
IF ($nofollow)
$output .= "<a target='_blank' rel='nofollow' href='".$result->comment_author_url."'>".$result->comment_author."</a>";
ELSE
$output .= "<a target='_blank' href='".$result->comment_author_url."'>".$result->comment_author."</a>";
ELSE
$output .= $result->comment_author;
IF ($comment) $output .= "(".$result->comments_count.")"; 
$output .= "<div style='clear:both;'></div></div></td>"; 
} 
IF ($i<=$col) $output .= "</tr>"; 
$output .= "</table></div>"; 
echo $output; 
}

 

Поясню некоторые значения:

 $length — количество символов в имени комментатора. Не указывайте слишком много символов: после длинного имени следующая аватарка отображается немного криво.

month — частота обновления топа. Если хотите, чтобы топ обновлялся каждый месяц ставьте true, если нет, то false.

$comment — количество отзывов: true — отображается, false — нет.

$nofollow — индексация ссылок. Для запрещения индексации поставьте true.

$count — число комментаторов, отображающихся в топе. Выбираете по вашему усмотрению.

$col — число столбцов

$avatarsize — размер аватара. Выбираете размер, котрый подойдет для вашего блога.

$exceptionEmail — укажите свой e-mail, чтобы топ не учитывал ваши комментарии.

2. Переходим в файл style.css и вставляем в самом конце следующий код:

.top-COMMENT {
height:100%;
margin-top:-10px;
}
.top-COMMENT TABLE {
min-height: 100%;
height:100%;
margin: 20px 0px 0px 5px;
}
.top-COMMENT TABLE td {
float: CENTER;
padding: 9px;
WIDTH: 70px;
}
.top-COMMENT .avatar-top img {
border: 3px solid #7FB2EC;
}
.top-COMMENT .avatar-COMMENT {
font-SIZE: 11px;
margin: 0;
}

Сохраняем изменения.

3. Если вы не используете виджеты в сайдбаре, то просто вставляете туда код:

<?php sp_top_commentator(); ?>

Если же вы, как и я, используете виджеты, то мы вставим этот код с помощью виджета. Но для того, чтобы это сделать нужно сначала добавить еще один код в файл functions.php

add_filter('widget_text','sp_widget_execute_php',100);
function sp_widget_execute_php($text) {
if(strpos($text,'<?') !== false) {
ob_start();
eval('?>'.$text);
$text = ob_get_contents();
ob_end_clean();
}
return $text;
}

Его, как и предыдущий код, я вставила в самом конце перед тегом ?>.

Благодаря этому коду текстовый виджет  будет исполнять PHP-код. Итак переходим во Внешний вид →Виджеты. перетаскиваем виджет текст в сайдбар и вставляем в него код :

<?php sp_top_commentator(); ?>

Не забываем сохранить и идем смотреть, что у нас получилось. Мне данный Топ комментаторов понравился больше, чем с помощью плагина.

Если боитесь изменять код, то можете установить плагин WP PHP Widget. Он также позволит вам вставлять в виджеты php код.

Выглядит он у меня так:

Топ комментаторов без плагина

Надеюсь и у вас получится его установить. Не забывайте участвовать в конкурсе комментаторов!

Также рекомендую почитать о том, как продвинуть сайт в топ и о выборе шаблона для блога.

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

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.

  1. Юлия

    Хорошо, что ты у себя статью с кодом разместила, а то все про плагин пишут. 😉 Очень хочется написать 200-й комментарий. 💡

    Ответить
    1. Евгения Куварина автор

      Ну так вперед! А лучше занять первое место в топе 🙂

    2. Юлия

      Жень, я хочу и 200, и первое место! Ты же знаешь, я способная! 😉

  2. Наталия Хоробрых

    Ой, вот как дело кодов касается, так мен страшно становится. Я все по старинке, плагином…. ❗

    Ответить
  3. Василий Гербутов

    Женя, привет! Спасибо Вам за код! Поставил себе всё работает … Желаю Вам удачи! ➡

    Ответить
    1. Евгения Куварина автор

      Всегда рада помочь! 🙂

  4. Валерия

    Спасибо, Евгения, за код. Попытаюсь поставить у себя. Надо постепенно убирать некоторые плагины.

    Ответить
    1. Евгения Куварина автор

      обращайтесь, если что). Помогу, чем смогу))

    2. Вера

      Женя!
      У меня нее получилось.
      В файл functions.php код встал корректно.
      В файл style.css код не встал. Я его вставляла так же, как в файл functions.php в самом конце перед тегом ?>
      И все, сайт вылетел. Что я неправильно сделала?

    3. Евгения Куварина автор

      Вера, у меня в файле style нет тега ?> и я вставляю просто в самый конец, еще у меня при копировании кода иногда копируется нумерация, цифры надо удалить. Ну и еще может зависеть от шаблона, есть вероятность, что код подойдет не для каждого

    4. Вера

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

  5. Ольга

    Здравствуйте.
    Тоже установила у себя подобный код (нашла его, правда, на другом блоге).
    Но в разных шаблонах код действует по-разному — мне никак не удалось подровнять, выставить ТОП в середине сайдбара. А у Вас замечательно получилось.

    Ответить
    1. Евгения Куварина автор

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

  6. Андрей

    Евгения, прочитав, сразу пошел делать у себя, но, к сожалению, не пошло. Еще один код, который надо добавить в файл functions.php, переносит меню в область над подвалом. 😮

    Ответить
    1. Евгения Куварина автор

      Андрей, думаю, многое зависит от шаблона. Возможно, вам лучше тогда использовать плагин

  7. Ксения

    Спасибо большое, Евгения! Мне так страшно было лезть в коды, но ТОП комментаторов очень хотелось сделать. Лишний плагин ставить не хотелось. И я все же решилась. Ура!!! У меня получилось! 😆
    Теперь у меня и ссылки на статьи можно оставлять, и ТОП комментаторов есть!

    Ответить
  8. Наталья Самолюк

    Незнаючи броду не стоит доверять коду. Нужно знать на каком html языке написан шаблон, как подключается тот или иной код в functions.php. а то как бы не пришлось горько плакать о потерянных данных. И когда что-то исправляете в шаблоне не ленитесь сделать бекап блога.

    Ответить
    1. Евгения Куварина автор

      Все верно, Наталья. Сохранить исходные данные надо прежде всего, чтобы без блога не остаться

    2. Екатерина

      Совершенно верно, Наталья, для того, чтобы «доверять коду», лучше всего обращаться к первоисточнику.

    3. Евгения Куварина автор

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

  9. Альберт

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

    Ответить
  10. Галина

    облазила блогов штук пять, везде способы похожие (даже очень) и только с вашего блога код подошел и стал ровненько =) спасибо, а то я уже хотела плагин ставить с горя =)

    Ответить
  11. Елена Юдина

    А у меня вчера плагин заглючил — неправильно показывал количество комментариев и соответственно топ был неверный. Пришлось установить код (спасибо, пригодился), пересчитать комментарии вручную и все сошлось 🙂

    Ответить
  12. Наталья

    А я честно говоря побаиваюсь в эти коды лезть, хотя много плагинов плохо сказываются на скорости сайта, а все они вроде бы нужны!
    Молодцы те, кто может поменять многие плагины на коды, просто молодцы! ❗

    Ответить
  13. Юрий

    Установил себе такой блок без плагинов, мне он больше понравился, чем с плагином. Он более красивый и современный.

    Ответить
  14. Pasagir

    Премного благодарен! А то я уже 3 плагина перепробовал. Так все значительно проще!!!

    Ответить
  15. Сергей

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

    Ответить
    1. Евгения Куварина автор

      Сергей, мне оформление кодом тоже больше нравится 🙂

  16. Kozak

    Код это хорошо. Главное — не забыть, что куда вставляешь.

    Ответить
  17. Елена

    Евгения, здравствуйте. Приглашаю вас присоединиться к моему первому конкурсу комментаторов.

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

    Осталась одна проблема: как обнулить счетчик? Мне нужно чтобы учет шел с 15 числа. Подскажите, пожалуйста.

    Ответить
    1. Евгения Куварина автор

      Елена, настроить комментарии по определенной дате, можно с помощью плагина топ комментаторов, а с помощью кода не думаю, что это возможно, либо надо искать другой код.

    2. Елена

      Евгения, попробовала ввести дату в соответствующее поле, ничего не выходит. Что-то делаю не так 😥

    3. Евгения Куварина автор

      В топе с помощью кода дату указать нельзя, а в плагине вроде надо указывать следующим образом: 20140515 and 20140615, но сама не пробовала.

  18. Елена

    Ура! Получилось! Евгения, большое спасибо 😛

    Ответить
  19. Аянбек

    Евгения, я все точно так же сделал, как Вы написали в статье. Теперь вопрос, как сделать так, чтоб под Аватаркой в топе коментаторов отображалось только имя, без фамилии.
    В вашей статье говориться только про то, что можно сократить количестве символов. А ведь надо сделать так, чтобы автоматически отображалось только имя. И еще вопрос, как сделать так, чтобы имена не отображались в виде ссылок, а просто как текст?

    Ответить
    1. Евгения Куварина автор

      Аянбек, никак, так как это зависит от комментатора, как он указал свое имя в комментарии, так оно и будет отображаться. Убрать ссылки тоже нельзя, нужно менять код, но в этом случае нужно быть специалистом и разбираться в них. Ссылки можно убрать, если использовать плагин топ комментаторов, там есть возможность выбора

    2. Аянбек

      Понятно, я настроил этот топ, но все как то криво у меня вышло, сейчас попробую с плагином настроить топ комментаторов, если будет лучше выглядеть, то оставлю. Красота требует жертв)))

  20. Максим

    Перепробовал несколько кодов для вывода комментариев без плагина, всегда были какие-то нюансы , ваш код подошёл без проблем, спасибо!!! 😉

    Ответить
  21. Дмитрий

    Добрый день, а как найти закрывающий тег ?>, я в своем файле functions.php, нашел 6 вхождений ?>

    Ответить
    1. Евгения Куварина автор

      Дмитрий, он самый последний в коде.

  22. Екатерина

    А мне удобнее плагинами пользоваться, как-то я боюсь залазить в коды.

    Ответить
  23. NI4KA

    Заказала на своем блоге блок с рейтингом комментаторов. Если мне его закончат и отладят до конца месяца, то в июле и у себя на блоге организую конкурс. Сама что-то на сайте редактировать, кроме статей и иллюстраций, даже не пытаюсь.

    Ответить