Виджет топ комментаторов без плагина
Приветствую вас, и буду сразу говорить о том, как сделать красивый вывод топ комментаторов без плагина. Да, можно и не заморачиваться особо и просто скачать плагин и всё готово, но плагин как вы уже знаете, грузит сайты, по этому от них нужно отказываться.
Многие блогеры ищут способы, чтоб сделать на своем блоге как можно меньше плагинов, чтоб блог просто летал, один из способов ускорении блога это Hyper Cache и меньше плагинов на блоге.
Итак, все это хорошо, вернемся к нашей теме.
Как сделать виджет топ комментаторов без плагина на WordPress?
И для начала, я покажу пример виджета который я буду использовать в данной статье:
Перейдем к установке, заходим в админ панель блога, затем Внешний вид/Редактор и находим файл functions.php, и вставить в него нужно данный код, вставляем в самый конец:
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 | function sp_top_commentator_winners(){ global $wpdb; $length = 0; // Максимальная длинна имени в символах, если стоит 0, то имя не обрезается $month = false; // true - за текущий месяц, false - за все время $comment = true; // показывать количество комментариев $nofollow = true; // ссылки nofollow $count = 12; // количество комментаторов $col = 3; // количество колонок $avatarSize = 40; // размер аватара $exceptionEmail = 'mail1@dom.com, mail2@mod.com'; // мыла-исключения $lengthMin = 10; // минимальное количество символов в учитываемом комментарии $showWinners = true; // показывать победителей $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.' 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); } |
Не забываем сохранить.
Настройки все очень просты и понятные, настроить можно победителей для вывода, вообщем разберетесь там не сложно, ну если возникнут вопросы всегда обращайтесь или пишите в комментариях, рекомендую редактировать эти настройки не в редакторе блога, и перед редактирование данного кода, сделайте копию сайта чтоб можно было если что, возобновить.
У меня на блоге есть конкурс ТОП Комментатор и если ты еще не участвуешь в нем, то начни прямо сейчас
И последнее что осталось, это разобраться со стилями, необходимо добавить еще один код в файл 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 30 31 32 33 34 | /*----------------------------------- TOP ------------------------------------------*/ .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; } |
И сохраняем.
Теперь осталось лишь вывести то что мы сделали, переходим Внешний вид/Виджеты и добавляем новый виджет «Текст» и вставим наш HTML-код, вот он:
1 | <?php sp_top_commentator_winners(); ?> |
Сохраняем, с помощью этого кода, вы сможете вывести этот виджет где угодно.
Для того чтобы вставлять PHP-код в виджет, необходимо включить эту функцию, так как без нее ничего не будет работать, вставте данный код в functions.php:
1 2 3 4 5 6 7 8 9 10 | add_filter('widget_text','sp_widget_execute_php',100); function sp_widget_execute_php($text) { if(strpos($text,'<?') !== false) { ob_start(); eval('?>'.$text); $text = ob_get_contents(); ob_end_clean(); } return $text; } |
И сохраните, важно вставить перед таким знаком ?> если его нет, тогда просто вставьте в самом конце.
На этом все, желаю всем успехов.
С уважением Евгений Смецкий
19 комментариев
В принципе очень полезная статья! И код расписан очень подробно с объяснениями, но...что же вы все так боитесь плагинов?????????? Это не так страшно как кажется!!!!!
Я с Игорем соглашусь! Плагины мне больше нравятся, но единственное, что в нем бывает много лишнего или дизайн не тот, а переделывать дольше, чем другое решение.
Женя, у меня не получается. Все точно по описанию, какой раз бьюсь, но все ни в какую.
В файл functions.php вставил код ?
Скинь свой functions.php мне на почту !
Да вставлял, сейчас скину файл. А тебе как пустой файл функтионс или с уже вставленным кодом топ комментаторов?
Бросай как есть !! И брось еще на всякий wrappers.php
У меня почему-то не отображается виджет в сайт баре после всех действий.
Внес изменения в статью !
Все, Женя, сделал!!! Блин, спасибо за инструкцию. Ни в какую не мог уже целыми неделями.
А откуда ты знал, что надо код этот поставить? 😀
Ты сделал по новому коду ??
Да, именно по новому.
Ну поздравляю 😀
Вопрос не по теме, но скажи, куда ты вставлял строку по выводу смайлов.
Я знаю, что в комментс.php, только именно не знаю. ВСе пишут, что надо перед тегом текстреа, но у меня такого нет.
Идешь в Консколь -> Настройки -> Написание и ставишь галочку «Преобразовывать смайлики в картинки». и всё.
Я пока использую плагин. но в будущем планирую сделать с помощью кода.
Ух ты, избавлюсь от лишнего плагина
Как в этой функции отключить коментарии автора?
В коде прописано «мыла-исключения» вставить нужно емаил свой и все ))