Топ комментаторов – блок, необходимый каждому блогу.
Как сделать блок «Топ комментаторов», без плагина?
Здравствуйте, дорогие друзья! Сегодня очередной хак для 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 = 'pochta@dom.ru, pochta2@mod.ru'; $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 = 'mail1@dom.ru, mail2@mod.ru'; // исключить адреса
Таким образом, мы включили функцию вывода нашего блока, а теперь займемся выводом ее в том месте, где хотим ее видеть. Можно вывести ее в сайдбаре, в футере или в любом другом месте. Я покажу вам, как вывести ее в сайдбаре. Открываем файл sidebar.php и вставляете в него вот эту функцию:
<?php sp_top_commentator(); ?>
Для того чтоб самые активные(победители) за месяц всегда выводились выше других в топе необходимо добавить еще одну функцию:
function sp_commentator_winners(){ global $wpdb; $length = 0 $comment = true $nofollow = true; $col = 3 $avatarSize = 40; $exceptionEmail = 'pochta@dom.ru, pochta2@mod.ru'; $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 мой сайт исчез с радаров всех компьютеров)))
Хорошо что была резервная копия файла- быстренько все обратно исправил и больше эксперементировать не стал.
Так что придется обращаться к профессионалам…
А этот урок- не для новичков.
@Михаил, согласен, это не для новичков… Каждая тема индивидуальна, я об этом писал, поэтому лучше обратиться к профессионалам. ))