Топ комментаторов – блок, необходимый каждому блогу.
Как сделать блок «Топ комментаторов», без плагина?
Здравствуйте, дорогие друзья! Сегодня очередной хак для worpress — топ комментаторов. Выгоды такого плагина можно описывать очень долго, и список это может быть длинным. Однако самым важным преимуществом является то, что такой блок позволяет сделать ваш сайт популярным и увеличить его трафик. Блоггеры, особенно начинающие знают, обычно посетители сайтов не очень активно комментируют посты. Конечно за исключением «жаренных» тем . Однако если они видят что на сайте присутствует блок топ комментаторов, то сразу начинается движуха и многие из них хотят оказаться на верхней позиции, чтоб ссылка на его сайт появилась на главной странице, а может и на всех страницах вашего блога. Это очень мотивирует посетителей, а самое важное, что выигрывают все.
В связи с тем, что я не люблю использовать плагины в worpress, я покажу как сделать такой блок без плагина. Итак, приступим.
Открываем файл functions.php вашей текущей темы и добавляем в него код представленный ниже.
Ну, а теперь сам код:
function sp_top_commentator(){
global $wpdb;
$length = 0;
$month = false
$comment = true;
$nofollow = true;
$count = 9;
$col = 3;
$avatarSize = 40;
$exceptionEmail = '[email protected], [email protected]';
$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><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;
}
Немного поясню значения данной функции:
$length = 0; // Длина имени
$month = false; // true - за текущий месяц, false - за все время
$comment = true; // Показывать количество комментариев
$nofollow = true; // ссылки nofollow
$count = 9; // количество комментаторов
$col = 3; // количество колонок
$avatarSize = 40; // размер аватара в пикселях
$exceptionEmail = '[email protected], [email protected]'; // исключить адреса
Таким образом, мы включили функцию вывода нашего блока, а теперь займемся выводом ее в том месте, где хотим ее видеть. Можно вывести ее в сайдбаре, в футере или в любом другом месте. Я покажу вам, как вывести ее в сайдбаре. Открываем файл sidebar.php и вставляете в него вот эту функцию:
<?php sp_top_commentator(); ?>
Для того чтоб самые активные(победители) за месяц всегда выводились выше других в топе необходимо добавить еще одну функцию:
function sp_commentator_winners(){
global $wpdb;
$length = 0
$comment = true
$nofollow = true;
$col = 3
$avatarSize = 40;
$exceptionEmail = '[email protected], [email protected]';
$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.' 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
month(comment_date) = month(now() - interval 1 month)
GROUP BY
comment_author_email
ORDER BY
comments_count DESC
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)."</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;
}
Функция $countWinners определяет, сколько победителей выводить в блоке. По умолчанию установлено 3, но вы можете изменить это значение на произвольное число. В файл sidebar.php надо добавить еще одну функцию вывода победителей:
<?php sp_commentator_winners(); ?>
Теперь необходимо красиво оформить блок топа комментаторов с помощью CSS стилей. Я думаю, что к вашему шаблону нужно будет написать индивидуальные стили оформления, так как дизайны у всех разные, однако может быть кому-то подойдет и этот код и его не придется редактировать:
.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 {
padding: 3px;
background: white;
border-image: initial;
border: 1px solid #D0D0BB;
margin: 0 0 3px 0;
}
.top-comment .avatar-comment {
font-size: 12px;
}
Вот так можно стимулировать активность среди посетителей вашего блога и подвигнуть их к более активному комментрованию ваших постов. Что в свою очередь повысит посещаемость и популярность сайта. Надеюсь, этот хак будет вам полезен. В принципе, сложного здесь ничего нет. Однако если вы не профессионал, лучше обратитесь к таковым, чтоб избежать проблем.
Удачи Вам в экспериментах и процветания вашего сайта!
- Установка WordPress на хостинг - 11.05.2017
- Хостинг для WordPress - 26.04.2017
- 7 советов как ускорить WordPress - 18.01.2017
- WordPress плагины вывода популярных постов - 25.07.2016
- Готовим ваш сайт для мобильных устройств? - 29.06.2016
|
Как преодолеть технические сложности
|
Javascript + jQuery
|
Профессиональный сайт за один день.
|




После ввода вашего кода в functions.php мой сайт исчез с радаров всех компьютеров)))
Хорошо что была резервная копия файла- быстренько все обратно исправил и больше эксперементировать не стал.
Так что придется обращаться к профессионалам…
А этот урок- не для новичков.
@Михаил, согласен, это не для новичков… Каждая тема индивидуальна, я об этом писал, поэтому лучше обратиться к профессионалам. ))