Как сделать ТОП комментаторов без плагина

Как сделать ТОП комментаторов без плагина

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

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

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

Итак, для начала, необходимо решить в каком месте, вы будет располагать виджет «Топ комментаторов». У меня, он находится в нижней части блога и показывается на всех страницах. Если вспомнить о структуре блога, об этом я писал в статье «Как создать блог. Мой блог – история создания.», то за нижнюю часть отвечает файл footer.php.

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

Поэтому, мы копируем себе на компьютер данный файл через FTP или будем менять его через админку WordPress. Лично я, редактирую все файлы, предварительно скачав их к себе на жесткий диск.

Внимание!!! Не забывайте делать резервные копии редактируемых файлов.

Затем, нам понадобится код, который будет выводить комментаторов в красивой форме, с аватарками, именами и количеством комментариев.

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

ТОП комментаторов

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

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

Как сделать топ комментаторов без плагина

Нам нужен вот этот код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* ТОП комментаторов */
function sp_top_commentator(){
    global $wpdb;
    $length = 0;        // Максимальная длинна имени в символах, если стоит 0, то имя не обрезается
    $month = true;     // true - за текущий месяц, false - за все время
    $comment = true;    // показывать количество комментариев
    $nofollow = true;   // ссылки nofollow
    $count = 6;        // количество комментаторов
    $col = 2;       // количество колонок
    $avatarSize = 60;   // размер аватара
    $exceptionEmail = 'schalex84@gmail.com, alekseishchukin@gmail.com'; // мыла-исключения
    $lengthMin = 10;    // минимальное количество символов в учитываемом комментарии
 
    $showWinners = true;    // показывать победителей
    $countWinners = 3;  // количество победителей
    $showDays = 3;      // количество дней, которое показываются победители
    $separator = '<hr style="display:block;" <br><p align="center" style="margin-top: 0; margin-bottom: 0"><b>
<font color="#01BE69"><span lang="ru">Активисты прошлого месяца
</font></a></span></font></b><br>'; // разделитель ТОПа и победителей
 
    $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.' where CHAR_LENGTH(comment_content) > '. $lengthMin .' 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,
            comment_ID ASC
        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.' where CHAR_LENGTH(comment_content) > '. $lengthMin .' 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
                    comment_date > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) AND 
                    comment_date < DATE_ADD(LAST_DAY(CURDATE() - INTERVAL 1 MONTH), INTERVAL 1 DAY)
                GROUP BY
                    comment_author_email
                ORDER BY
                    comments_count DESC,
                    comment_ID ASC
                LIMIT '.$countWinners
            );
            echo $separator;
            $firstIteration = false;
        } else {
            $showWinners = false;
        }
    } while($showWinners);
}
 
 
function php_in_widgets($widget_content) {
    if (strpos($widget_content, '<' . '?') !== false) {
        ob_start();
        eval('?' . '>' . $widget_content);
        $widget_content = ob_get_contents();
        ob_end_clean();
    }
    return $widget_content;
}
/* ТОП комментаторов END */

Данный код нужно вставить в конец файла functions.php, но некоторые темы (например, моя тема) не хотят выводить «Топ комментаторов» таким образом. Я немого схитрил и хочу рассказать вам как. Вместо того чтобы вставить код в конец файла functions.php я добавил его в самое начало после «<?php», от этих перестановок работоспособность блога не меняется.

Дальше нам нужно чтобы Топ комментаторов выглядел красиво, поэтому в файл style.css добавляем код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* Стили топ комментаторов*/
.top-comment {
height:100%;
}
.top-comment table {
min-height: 100%;
height:100%;
width:100%;
}
.top-comment table tr {
text-align:left;
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: 2px solid #1FA67E;
border-radius: 50%; -moz-border-radius: 50%; -webkit-border-radius: 50%;
}
.top-comment .avatar-comment {
font-size: 12px;
}

Теперь поговорим, как добавить PHP код в виджет wordpress.
Конечно, можно использовать плагины, но сегодня мы обойдемся без них.
Для этого в файл functions.php добавляем код:

1
2
3
4
5
6
7
8
9
10
add_filter('widget_text', 'php_in_widgets', 99);
function sp_widget_execute_php($text) {
    if(strpos($text,'<?') !== false) {
        ob_start();
        eval('?>'.$text);
        $text = ob_get_contents();
        ob_end_clean();
    }
    return $text;
}

Этот код можно вставить сразу за кодом Топ комментариев, т.е. после строчки «/* ТОП комментаторов END */».

Ну и теперь, самое интересное.

Переходим в нашу админку и выбираем «Внешний  вид» — «Виджеты».

ТОП комментаторов

ТОП комментаторов

Выбираем текстовую форму для виджета. Перетаскиваем в нужное нам место, и в саму форму виджета вставляем код:

1
<?php sp_top_commentator(); ?>

На этом настройка закончена.Обновляем блог и смотрим на результат.

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

Иван Малышев. К сожалению, его блог больше не доступен.

SlowProg, его блог — paperplane.su

Ребята, огромное вам спасибо, без вашей помощи было бы тяжело.

Оцените статью, не проходите мимо, оставляйте комментарии.

Возможно, кто-то сталкивался с такими же проблемами, опишите свои действия.

Я уверен, кто-нибудь скажет и вам свое скромное СПАСИБО.

На этом заканчиваю статью.

Подписывайтесь на новые статьи.

До скорых встреч!

Нажми на кнопку - поделись с друзьями!
Это лучшая награда для автора!


Количество комментариев: 28. Оставь свой комментарий к статье “Как сделать ТОП комментаторов без плагина

  1. Я делал похожий ТОП комментаторов на своём прошлом сайте. Вообще, плагину лучше исключать по максимуму, особенно тяжёлые. Так что эта статья будет полезна многим.

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

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

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

  5. Алексей, Вы осветили очень важную опцию. ТОП комментаторов — это. мне кажется, достаточно интересно и привлекательно. Закину Вашу статью к себе в закладки. Я всегда так делаю, когда вижу что-то интересное и достойное того, чтобы применить это у себя на сайте.

    Часто случается, что многие коды либо не работают, либо (что бывает, думаю, у всех) работают «криво» и нуждаются в дополнительной доводке.

    В общем, спасибо Вам за статью. Обязательно попробую предложенный Вами код на своей сайте.

  6. Спасибо за статью! У меня с топом комментаторов проблемы есть, поэтому буду исправлять по описанному способу. Дело в том, что никак не могу обнулить счётчик в топе, даже фрилансеров просил, но не вышло. Как-то криво мой топ сделали.

  7. Автор этого кода вроде Константин Хмелев.
    Единственно, что мне в коде не нравится, то, что ссылки на сайты комментаторов в топе не закрыты от поисковиков. Тег nofollow ни о чем.
    Пробовал переделывать, но сайт падает. Хотя вроде все правильно.
    http://pastebin.com/GhXtYaM4

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

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

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