Авторы комментариев
Совсем забыл что обещал выложить код для отображения авторов комментариев. Исправляюсь.
Для начала сделайте шаблон постоянной страницы. Для этого скопируйте page.php (если его нет, то single.php, или если и этого нет, то index.php) как main-allautorurl.php. После этого удалите в нем цикл TheLoop, который обычно находится в строчках (включая указанные):
if (have_posts()) : while (have_posts()) : the_post(); ... ... <?php endwhile; else: echo '<h1>Извините, ничего не найдено...</h1>'; endif; ?>
Теперь в самое начало файла допишем:
<?php /* Template Name: Авторы комментариев (allautorurl) */ ?>
Теперь идем в админку и создаем новую постоянную страницу, где в качестве шаблона выбираем "Авторы комментариев (allautorurl)". Текст можно не писать. Также нужно указать короткую ссылку "allautorurl".
После этого добавьте в ссылку на страницу в сайдбар или меню, в общем, где вам нужно:
<a href="http://сайт/allautorurl">Авторы комментариев</a>
Дальше открываем main-allautorurl.php и вместо удаленного цикла TheLoop вбиваем такой код:
<h1 class="search">Авторы комментариев</h1>
<p>На этой странице отображены(*) 100 наиболее активных комментаторов. Для того, чтобы отобразилась ссылка на ваш сайт, нужно попасть в первую десятку.</p>
<ol class="is_link allcomment">
<?php
$request = "SELECT comment_author, comment_author_url, COUNT(comment_author) AS comment_count, comment_date, comment_approved
FROM $wpdb->comments
WHERE comment_approved = '1' AND comment_author_url > '' AND comment_author_url <> 'http://ваш сайт/'
GROUP BY comment_author_url
ORDER BY comment_count DESC, comment_date DESC
LIMIT 100";
$a = $wpdb->get_results ($request);
$i = 0;
foreach ($a as $b)
{
if ($i < 10 )
{
$link = $b->comment_author_url;
$link_name = str_replace('http://', '', $link);
if (strrpos($link_name , '/') == (strlen($link_name)-1) )
$link_name = substr($link_name, 0, strlen($link_name)-1 );
$link = ' - <a href="' . $link . '">' . $link_name . '</a>';
echo '<li style="margin: 5px 0; font-size: 1.8em;"><strong style="color: #0C4070;">' .
$b->comment_author . '</strong> <sub>' .
$b->comment_count . '</sub>' . $link . '</li>';
}
else
echo '<li><strong><font style="color: gray;">' .
$b->comment_author . '</strong> <sub>' .
$b->comment_count . '</sub></font></li>';
$i++;
}
?>
</ol>
<?php endif ?>
<p>(*) <em>Список составлен из авторов тех сообщений, где указаны
адреса сайтов. Группировка выполнена по адресу сайта, поэтому возможны дубли
авторов, которые указывали разные адреса и/или свое имя. В случае равенства
количества сообщений, более высокую позицию занимает автор с более новым
комментарием.</em></p>
Оформление, естественно делайте уже по-своему. Также не забудьте указать свой сайт в SQL-запросе. Это для того, чтобы не учитывать ваши собственные комментарии.
Из недостаков данного кода отмечу то, что у меня так и не получилось в одном SQL-запросе сделать так, чтобы суммировались комментарии от одного автора при указанном и отсутствующем адресе.
Мой рабочий пример.
Постоянная ссылка: http://maxsite.org/?p=259
Версия для печати
