Меняем плагин Топ комментаторов на вкрапление кода

Приветствую, друзья! После того как я сменил дизайн своего блога на адаптивный, мне пришлось отказываться от некоторых плагинов, которые работали с этим дизайном некорректно. Первый из них – это плагин под названием Top Commentators Widget, выводящий топ комментаторов в сайдбаре.

вывод ТОП комментаторов с помощью кода

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

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

Сейчас мой блог работает на CMS WordPress и в первую очередь статья о том, как вывести топ комментаторов с помощью кода будем полезна всем, кто использует эту же систему управления контентом для ведения своего блога или сайта, а так же тем, кто использует другие не менее популярные CMS, такие как Joomla, Drupal, DLE, Ucoz и т.п.

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

Первую часть кода необходимо вставить в функции темы: Внешний вид – Редактор – Функции темы (functions.php)

редактор functions

Добавляем код, который выводит ТОП комментаторов

В конце редактора функций темы перед ?> вставляем следующий код:

// top_commentator start
function sp_top_commentator(){
    global $wpdb;
    $length = 9;      // максимальная длина имени в символах, если стоит 0, то имя не обрезается
    $month = true;     // true - за текущий месяц, false - за все время
    $comment = true;   // показывать количество комментариев (true - да, false - нет)
    $nofollow = true;  // ссылки nofollow (true - да, false - нет)
    $count = 6;        // количество комментаторов
    $col = 3;          // количество колонок
    $avatarSize = 73;  // размер аватара
    $exceptionEmail = '[email protected], [email protected]'; // адреса e-mail для исключения (например, e-mail владельца блога)
    $lengthMin = 30;   // минимальное количество символов в учитываемом комментарии
    $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\.\-_][email protected][\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
    );
    $output = "<div class='top-comment'><table><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, '',$result->comment_author)."</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><br />";
            else
                $output .= "<a target='_blank' href='".$result->comment_author_url."'>".$result->comment_author."</a><br />";
        else
            $output .= $result->comment_author."<br />";
 
        if ($comment) $output .= "(".$result->comments_count.")";
        $output .= "<div style='clear:both;'></div></div></td>";
    }
    if ($i<=$col) $output .= "</tr>";
    $output .= "</table></div>";
    echo $output;
}
// top_commentator end

 Значения переменных в строках с 4 по 12, в которых стоят комментарии после двух слешев ( // комментрий ), можно задать такие, которые необходимы именно вам. Что обязательно нужно поменять, так это e-mail адреса. После чего нажимаем кнопку “Обновить файл”.

Добавляем код, который выводит победителей прошлого месяца

В тот же файл function.php в самый конец перед ?> вставляем следующий код:

// top_commentator_winners start
function sp_commentator_winners(){
    global $wpdb;
    $length = 9;       // максимальная длина имени в символах, если стоит 0, то имя не обрезается
    $comment = true;    // показывать количество комментариев (true - да, false - нет)
    $nofollow = true;   // ссылки nofollow (true - да, false - нет)
    $col = 3;           // количество колонок
    $avatarSize = 73;   // размер аватара
    $exceptionEmail = '[email protected], [email protected]'; // адреса e-mail для исключения (например, e-mail владельца блога)
    $lengthMin = 30;    // минимальное количество символов в учитываемом комментарии
    $countWinners = 3;  // количество победителей
    $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\.\-_][email protected][\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
    );
    $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, '',$result->comment_author)."</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><br />";
            else
                $output .= "<a target='_blank' href='".$result->comment_author_url."'>".$result->comment_author."</a><br />";
        else
            $output .= $result->comment_author."<br />";
 
        if ($comment) $output .= "(".$result->comments_count.")";
        $output .= "<div style='clear:both;'></div></div></td>";
    }
    if ($i<=$col) $output .= "</tr>";
    $output .= "</table></div>";
    echo $output;       
}
// top_commentator_winners end

 

В строках с 4 по 11 так же можно менять значения переменных на свои. И обязательно укажите свои e-mail адреса. После чего нажмите “Обновить файл”.

Задаем стили блоков ТОП комментаторов и Победители прошлого месяца

Снова переходим в редактор: Внешний вид – Редактор (слева). Выбираем справа файл style.css: Стили – Таблица стилей. В открывшийся файл в самый конец вставляем следующий код:

/* start commentator */
.top-comment {
    height: auto;
}
 
.top-comment table {
    min-height: 100%;
    height: auto;
    width: 100%;
}
 
.top-comment table tr {
   text-align: center;
   vertical-align: top;
}
 
.top-comment table td {
    padding: 0 5px 5px 5px;
}
 
.top-comment .avatar-top img {
    vertical-align: bottom;
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    -khtml-border-radius: 4px;
    border-radius: 4px;
}
 
.top-comment .avatar-comment {
    font-size: 12px;
    margin-top: 5px;
}
/* end commentator */

Нажимаем кнопку “Обновить файл”.

Отдельная благодарность Юрию Йосифовичу за рекомендации и непосредственное участие в адаптации этой части кода под адаптивный дизайн моего блога.

Выводим блоки ТОП комментаторов и Победители прошлого месяца в сайдбар

Вывести эти блоки в боковой панели можно двумя способами.

В первом варианте нам снова нужно зайти в Редактор и справа выбрать файл sidebar.php в меню Боковая колонка и в ставить в те места, где бы вы хотели, чтоб выводились вышеупомянутые блоки следующий код:

<?php sp_top_commentator(); ?>

– для вывода блока Топ комментаторов;

<?php sp_commentator_winners(); ?>

– для вывода блока Победители прошлого месяца.

Во втором случае, как сделал я, эти блоки можно вывести через виджеты. Чтоб код сработал, для этого на вашем блоге должен быть установлен плагин PHP Code Widget.

вставка php-кода на блог

Выбираем элемент PHP Code и, зажав левую кнопку мыши, перетаскиваем его в то место, где будут выводиться блоки комментаторов. Вставляем в него следующий код и нажимаем “Сохранить”. Заголовок (Title) прописывать не обязательно.

<div class="widget widget_text">
     <h3 class="widget-title"><span>ТОП КОММЕНТАТОРОВ</span></h3>
     <?php sp_top_commentator(); ?>
</div>
 
<div class="widget widget_text">
     <h3 class="widget-title"><span>ПОБЕДИТЕЛИ ПРОШЛОГО МЕСЯЦА</span></h3>
     <?php sp_commentator_winners(); ?>
</div>

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

Подписывайтесь на обновления блога :)

С вами был Сергей Грицюк, автор блога seomodern.biz.

Оставьте комментарий

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

два × 3 =