Добрый день, друзья! В начале месяца я запустила конкурс «Комментатор месяца» и установила виджет Топ комментаторов, так как без него конкурс провести трудно.
Сделала я это с помощью плагина. Это простой и удобный способ. Подробнее узнать о нем, а также об условиях моего конкурса вы можете здесь.
Но по возможности я стараюсь заменять плагины кодом, чтобы блог загружался быстрее. И я решила и топ комментаторов вывести с помощью кода.
Первая попытка оказалась не совсем удачной. Топ комментаторов никак не хотел вставать туда, куда надо было мне, а появлялся в самом верху сайдбара.
Но благодаря подсказке Юлии, хозяйке блога bubuchinka.ru, мне удалось решить эту проблему. Дело было в том, что я использовала виджеты в сайдбаре и добавить между ними код было нельзя. К счастью решение нашлось, но обо всем по порядку.
Топ комментаторов без плагина
Нам нужно будет внести изменения в следующие файлы: functions.php, style.css и sidebar.php. Если вы захотите вставить топ в подвал темы, то вам понадобится файл footer.php.
Очень советую сохранить сначала все эти файлы себе на компьютер, чтобы легко можно было все восстановить, если что-то пойдет не так.
1. Сначала в файл functions.php перед закрывающим тегом ?> вставляем код:
FUNCTION sp_top_commentator(){
global $wpdb;
$length = 9; // количество символов
$month = true; // периодичность обновления
$comment = true; // показатель комментариев
$nofollow = true; // индексация комментариев
$count = 4; // количество комментаторов
$col = 2; // число столбцов
$avatarSize = 70; // размер аватара
$exceptionEmail = 'evgeniyakuvarina@gmail.com'; // исключение адреса
$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
);
$output = "<div class='top-comment'><table width='100%'><tr align='center' valign='top'>";
$i = 0;
foreach($results AS $result){
IF ($i>=$col) {
$output .= "</tr><tr align='center' valign='top'>";
$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;
}
Поясню некоторые значения:
$length — количество символов в имени комментатора. Не указывайте слишком много символов: после длинного имени следующая аватарка отображается немного криво.
month — частота обновления топа. Если хотите, чтобы топ обновлялся каждый месяц ставьте true, если нет, то false.
$comment — количество отзывов: true — отображается, false — нет.
$nofollow — индексация ссылок. Для запрещения индексации поставьте true.
$count — число комментаторов, отображающихся в топе. Выбираете по вашему усмотрению.
$col — число столбцов
$avatarsize — размер аватара. Выбираете размер, котрый подойдет для вашего блога.
$exceptionEmail — укажите свой e-mail, чтобы топ не учитывал ваши комментарии.
2. Переходим в файл style.css и вставляем в самом конце следующий код:
.top-COMMENT { height:100%; margin-top:-10px; } .top-COMMENT TABLE { min-height: 100%; height:100%; margin: 20px 0px 0px 5px; } .top-COMMENT TABLE td { float: CENTER; padding: 9px; WIDTH: 70px; } .top-COMMENT .avatar-top img { border: 3px solid #7FB2EC; } .top-COMMENT .avatar-COMMENT { font-SIZE: 11px; margin: 0; }
Сохраняем изменения.
3. Если вы не используете виджеты в сайдбаре, то просто вставляете туда код:
<?php sp_top_commentator(); ?>
Если же вы, как и я, используете виджеты, то мы вставим этот код с помощью виджета. Но для того, чтобы это сделать нужно сначала добавить еще один код в файл functions.php
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;
}
Его, как и предыдущий код, я вставила в самом конце перед тегом ?>.
Благодаря этому коду текстовый виджет будет исполнять PHP-код. Итак переходим во Внешний вид →Виджеты. перетаскиваем виджет текст в сайдбар и вставляем в него код :
<?php sp_top_commentator(); ?>
Не забываем сохранить и идем смотреть, что у нас получилось. Мне данный Топ комментаторов понравился больше, чем с помощью плагина.
Если боитесь изменять код, то можете установить плагин WP PHP Widget. Он также позволит вам вставлять в виджеты php код.
Выглядит он у меня так:
Надеюсь и у вас получится его установить. Не забывайте участвовать в конкурсе комментаторов!
Также рекомендую почитать о том, как продвинуть сайт в топ и о выборе шаблона для блога.
Хорошо, что ты у себя статью с кодом разместила, а то все про плагин пишут. 😉 Очень хочется написать 200-й комментарий. 💡
Ну так вперед! А лучше занять первое место в топе 🙂
Жень, я хочу и 200, и первое место! Ты же знаешь, я способная! 😉
Ой, вот как дело кодов касается, так мен страшно становится. Я все по старинке, плагином…. ❗
Женя, привет! Спасибо Вам за код! Поставил себе всё работает … Желаю Вам удачи! ➡
Всегда рада помочь! 🙂
Спасибо, Евгения, за код. Попытаюсь поставить у себя. Надо постепенно убирать некоторые плагины.
обращайтесь, если что). Помогу, чем смогу))
Женя!
У меня нее получилось.
В файл functions.php код встал корректно.
В файл style.css код не встал. Я его вставляла так же, как в файл functions.php в самом конце перед тегом ?>
И все, сайт вылетел. Что я неправильно сделала?
Вера, у меня в файле style нет тега ?> и я вставляю просто в самый конец, еще у меня при копировании кода иногда копируется нумерация, цифры надо удалить. Ну и еще может зависеть от шаблона, есть вероятность, что код подойдет не для каждого
Да, у меня первый раз именно так и вставилось, нумерация отдельно и выше вставилась, чем код.
Здравствуйте.
Тоже установила у себя подобный код (нашла его, правда, на другом блоге).
Но в разных шаблонах код действует по-разному — мне никак не удалось подровнять, выставить ТОП в середине сайдбара. А у Вас замечательно получилось.
Ольга, теперь у вас все в порядке, как я посмотрела. Все смотрится просто отлично
Евгения, прочитав, сразу пошел делать у себя, но, к сожалению, не пошло. Еще один код, который надо добавить в файл functions.php, переносит меню в область над подвалом. 😮
Андрей, думаю, многое зависит от шаблона. Возможно, вам лучше тогда использовать плагин
Спасибо большое, Евгения! Мне так страшно было лезть в коды, но ТОП комментаторов очень хотелось сделать. Лишний плагин ставить не хотелось. И я все же решилась. Ура!!! У меня получилось! 😆
Теперь у меня и ссылки на статьи можно оставлять, и ТОП комментаторов есть!
Незнаючи броду не стоит доверять коду. Нужно знать на каком html языке написан шаблон, как подключается тот или иной код в functions.php. а то как бы не пришлось горько плакать о потерянных данных. И когда что-то исправляете в шаблоне не ленитесь сделать бекап блога.
Все верно, Наталья. Сохранить исходные данные надо прежде всего, чтобы без блога не остаться
Совершенно верно, Наталья, для того, чтобы «доверять коду», лучше всего обращаться к первоисточнику.
Екатерина, просто автор кода мне не известен, так как он есть на многих блогах и нигде не указывается автор. Спасибо, что сказали кто он
По мне лучше установить топ комментаторов без кода, так как плагины нагружают блог.
облазила блогов штук пять, везде способы похожие (даже очень) и только с вашего блога код подошел и стал ровненько =) спасибо, а то я уже хотела плагин ставить с горя =)
А у меня вчера плагин заглючил — неправильно показывал количество комментариев и соответственно топ был неверный. Пришлось установить код (спасибо, пригодился), пересчитать комментарии вручную и все сошлось 🙂
А я честно говоря побаиваюсь в эти коды лезть, хотя много плагинов плохо сказываются на скорости сайта, а все они вроде бы нужны!
Молодцы те, кто может поменять многие плагины на коды, просто молодцы! ❗
Установил себе такой блок без плагинов, мне он больше понравился, чем с плагином. Он более красивый и современный.
Премного благодарен! А то я уже 3 плагина перепробовал. Так все значительно проще!!!
Код работает гораздо лучше, чем плагин той же функциональности. Даже стиль по умолчанию хорошо вписался в шаблон блога. Особенно понравилось, что для каждого месяца статистика может быть своя.
Сергей, мне оформление кодом тоже больше нравится 🙂
Код это хорошо. Главное — не забыть, что куда вставляешь.
Евгения, здравствуйте. Приглашаю вас присоединиться к моему первому конкурсу комментаторов.
Большое спасибо за статью, наконец то, благодаря ей, я смогла вывести топ комментаторов в сайдбар.
Осталась одна проблема: как обнулить счетчик? Мне нужно чтобы учет шел с 15 числа. Подскажите, пожалуйста.
Елена, настроить комментарии по определенной дате, можно с помощью плагина топ комментаторов, а с помощью кода не думаю, что это возможно, либо надо искать другой код.
Евгения, попробовала ввести дату в соответствующее поле, ничего не выходит. Что-то делаю не так 😥
В топе с помощью кода дату указать нельзя, а в плагине вроде надо указывать следующим образом: 20140515 and 20140615, но сама не пробовала.
Ура! Получилось! Евгения, большое спасибо 😛
Евгения, я все точно так же сделал, как Вы написали в статье. Теперь вопрос, как сделать так, чтоб под Аватаркой в топе коментаторов отображалось только имя, без фамилии.
В вашей статье говориться только про то, что можно сократить количестве символов. А ведь надо сделать так, чтобы автоматически отображалось только имя. И еще вопрос, как сделать так, чтобы имена не отображались в виде ссылок, а просто как текст?
Аянбек, никак, так как это зависит от комментатора, как он указал свое имя в комментарии, так оно и будет отображаться. Убрать ссылки тоже нельзя, нужно менять код, но в этом случае нужно быть специалистом и разбираться в них. Ссылки можно убрать, если использовать плагин топ комментаторов, там есть возможность выбора
Понятно, я настроил этот топ, но все как то криво у меня вышло, сейчас попробую с плагином настроить топ комментаторов, если будет лучше выглядеть, то оставлю. Красота требует жертв)))
Перепробовал несколько кодов для вывода комментариев без плагина, всегда были какие-то нюансы , ваш код подошёл без проблем, спасибо!!! 😉
Добрый день, а как найти закрывающий тег ?>, я в своем файле functions.php, нашел 6 вхождений ?>
Дмитрий, он самый последний в коде.
А мне удобнее плагинами пользоваться, как-то я боюсь залазить в коды.
Заказала на своем блоге блок с рейтингом комментаторов. Если мне его закончат и отладят до конца месяца, то в июле и у себя на блоге организую конкурс. Сама что-то на сайте редактировать, кроме статей и иллюстраций, даже не пытаюсь.