ТОП комментаторов без плагина + функция «Победители»

top-comments

Здравствуйте дорогие посетители! Довольно много времени прошло с того момента, как я пообещал написать статью на тему «ТОП комментаторов» естественно без использования плагинов. Но этот момент настал и вместо того чтобы долго и нудно лить воду предлагаю сразу приступить к делу.

Что умеет функция?

  •  задается максимальная длина имени
  • выводит комментаторов за месяц или за все время (на выбор)
  •  показывает количество комментариев каждого пользователя (отключается)
  • ссылки комментаторов follow или  nofollow (на выбор)
  • задается количество отображаемых комментаторов
  •  задается количество колонок комментаторов
  • задается размер аватаров
  • задаются в исключение E-mail адреса

Если вы проводите конкурсы, связанные с комментариями, вам также будут интересны следующие настройки функции:

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

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

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

Для начала проверьте, включено ли отображение аватаров на вашем блоге. Для этого проследуйте в панель администратора, «Параметры – Обсуждение», внизу, нужно отметить галочкой «Показывать аватары», если вы еще этого не сделали.

Предоставляю код (автор):

function sp_top_commentator_winners(){
     global $wpdb;
     $length = 0;        // Максимальная длинна имени в символах, если стоит 0, то имя не обрезается
     $month = false;     // true - комментаторы за текущий месяц, false - за все время
     $comment = true;    // Показывать количество комментариев? true - показывать, false - не показывать
     $nofollow = true;   // Ссылки nofollow, true - да, false - нет
     $count = 12;        // Количество отображаемых комментаторов
     $col = 3;       // Количество колонок
     $avatarSize = 40;   // Размер аватара в px
     $exceptionEmail = 'mail@mail.ru, mail2@mail.ru'; // исключить эти E-mail адреса из ТОПа

     $showWinners = true;    // Показывать победителей? true - показывать, false - не показывать
     $countWinners = 3;  // Количество победителей
     $showDays = 3;      // Количество дней, которое показываются победители
     $separator = '<hr style="display:block;">'; // разделитель ТОПа и победителей

     $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
     );

     $firstIteration = true; // отвечает за то чтобы было всего две итерации
     do {
         $output = "<div class='top-comment'><table width='100%'><tr>";
         $i = 0;
         foreach($results as $result){
             if ($i>=$col) {
                 $output .= "</tr><tr>";
                 $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;

         if ($showWinners and date('j') <= $showDays and $firstIteration) {
             $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).') AND
                     month(comment_date) = month(now() - interval 1 month)
                 GROUP BY
                     comment_author_email
                 ORDER BY
                     comments_count DESC
                 LIMIT '.$countWinners
             );
             echo $separator;
             $firstIteration = false;
         } else {
             $showWinners = false;
         }
     } while($showWinners);
}

 

Данный код нужно поместить в файл functions.php вашей темы, что можно сделать с помощью Notepad++ или через панель администратора «Внешний вид – Редактор», вставляйте в самый конец, перед ?>.

code-top-comment

Далее нам нужно где-то показывать ТОП  комментаторов. Для этого вставьте следующий код (например, в сайдбар или прямо в виджет WordPress):

<?php sp_top_commentator_winners(); ?>

 

Оформим наш ТОП с помощью CSS, на моем блоге такие стили (темный фон, закругленные края):

  /* Топ комментаторов */
   .top-comment {
     height:100%;
}

.top-comment table {
     min-height: 100%;
     height:100%;
}

.top-comment table td {
     padding:0 5px 15px 5px;
}

.top-comment .avatar-top img {
     -webkit-box-shadow: #666 0px 0px 5px;
     -moz-box-shadow: #666 0px 0px 5px;
     box-shadow: #666 0px 0px 5px;
     padding: 3px;
     background: black;
     border-image: initial;
     border: 1px solid #D0D0BB;
	 border-radius: 5px 5px 5px 5px;
     margin: 5px 12px 2px 10px;
}

.top-comment .avatar-comment {
     font-size: 12px;
	 margin: 0 0 -10px;

 

Белый фон, без закругления:

.top-comment {
     height:100%;
}

.top-comment table {
     min-height: 100%;
     height:100%;
     width:100%;
}

.top-comment table tr {
    text-align:center;
    vertical-align: top;
}

.top-comment table td {
     padding:0 5px 15px 5px;
}

.top-comment .avatar-top img {
     -webkit-box-shadow: #666 0px 2px 3px;
     -moz-box-shadow: #666 0px 2px 3px;
     box-shadow: #666 0px 2px 3px;
     padding: 3px;
     background: white;
     border-image: initial;
     border: 1px solid #D0D0BB;
     margin: 0 0 3px 0;
}

.top-comment .avatar-comment {
     font-size: 12px;
}

 

Данный код вставляется в файл стилей (обычно это style.css или screen.css) в самый конец.

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

Новость! Сегодня получил письмо от хостера о том, что мой малопосещаемый и неприметный блог был подвергнут брут атаке подбора пароля. Приятно удивило, что среагировали ребята быстро и тутже сменили мне страницу логина, дабы избежать дальнейших атак! Честно скажу, давно собирался написать о хостинге, который я использую, но толи лень меня одолевала, толи не было стимула,… в общем, не пропустите мой отзыв о хостинге.

 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
16 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Людмила
8 лет назад

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

Людмила
8 лет назад

Все разобралась! Еще код для поддержки рHр в виджете добавила и все заработало! УРА!

Андрей
Андрей
8 лет назад

Случайно зашол на ваш блог. Сначала просмотрел и закрыл, а потом искал решение проблемы с виджетами и вспомнил, что видел здесь. Внимательно почитал и оказалось что тут полно полезностей! Спасибо!! В сочетании с php в виджете все отлично работает! Ура!! 😆 😀 😎 😯

Людмила
8 лет назад

Спасибо,Сергей за актуальную тему! А то плагин ТОП комментаторов сам не закрывает ссылки сайтов комментаторов и в результате может появиться переспам (как то на себе убедилась) 😕 И ноиндекс от этого не очень то помогает, кодом всегда надежнее,да лишний плагин не придется ставить 🙂

Константин
8 лет назад

Здравствуйте. Не могли бы Вы объяснить как работает данный код, если я буду проводить конкурс комментаторов. Вот я его поставил на свой блог. Комментарии уже какие-то есть и уже имеются топ комментаторы. Но когда я начну проводить конкурс, что мне нужно будет сделать? Ведь потребуется как-то сделать, чтобы на время конкурса счетчик обнулился или как?

Не совсем могу понять, как проводить конкурсы с помощью данного кода)
Спасибо!

Константин
Ответить на  Сергей
8 лет назад

Я видел этот код. Мне просто было непонятно как происходит отбор победителей. Оказывается все на автомате. Спасибо)

Людмила
8 лет назад

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

Дмитрий
Дмитрий
7 лет назад

Здравствуйте. А мне вот понравились как у вас на блоге реализованы комментарии. Скажите как сделать чтобы коментарии с классом «children», тоесть при ответе на комент, твой комент будет с классом «children» . как сделать так чтобы он был в отдельном блоке а не вложен в тот блок на который комент ответили.. тоесть как у вас на сайте? Я в Php не силен. потому для меня сложновато это все. Но буду очень признателен за подсказку!

Дмитрий
Дмитрий
Ответить на  Сергей
7 лет назад

Хочу древовидные но не вложенные.. чтобы блоки были раздельными как у вас… а не все в одном блоке как по стандарту.

16
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x
Send this to a friend