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

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 голоса
Рейтинг статьи
16 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Людмила
11 лет назад

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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