Приветствую, друзья! После того как я сменил дизайн своего блога на адаптивный, мне пришлось отказываться от некоторых плагинов, которые работали с этим дизайном некорректно. Первый из них – это плагин под названием Top Commentators Widget, выводящий топ комментаторов в сайдбаре.
В дизайн старого шаблона плагин Топ комментаторов вписывался замечательно и его функционал меня полностью устраивал. Тем более тогда я только начинал вести блог и проводить на нем конкурсы с ценными призами, поэтому в коде особо не разбирался и на тот момент не было в этом необходимости. Была задача вывести список активных комментаторов в сайдбар, с которой этот плагин успешно справился.
Как вывести ТОП комментаторов на блоге с помощью кода?
Сейчас мой блог работает на CMS WordPress и в первую очередь статья о том, как вывести топ комментаторов с помощью кода будем полезна всем, кто использует эту же систему управления контентом для ведения своего блога или сайта, а так же тем, кто использует другие не менее популярные CMS, такие как Joomla, Drupal, DLE, Ucoz и т.п.
Представленный ниже код вывода активных комментаторов удобен тем, что каждый может настроить его в соответствии со своими пожеланиями, особо не разбираясь в программировании. Выводимый ТОП комментаторов будет красиво адаптироваться под размер экрана любого мобильного устройства или компьютера.
Первую часть кода необходимо вставить в функции темы: Внешний вид – Редактор – Функции темы (functions.php)
Добавляем код, который выводит ТОП комментаторов
В конце редактора функций темы перед ?> вставляем следующий код:
// 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 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.