Обратите внимание, что вместо WordPress
лучше использовать современную и качественную
систему управления сайтом - MaxSite CMS!

Авторы комментариев

29 июля 2007 г. Просмотров: 5814 RSS 16
WordPress » Плагины и хаки

Совсем забыл что обещал выложить код для отображения авторов комментариев. Исправляюсь. smile

Для начала сделайте шаблон постоянной страницы. Для этого скопируйте 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-запросе сделать так, чтобы суммировались комментарии от одного автора при указанном и отсутствующем адресе.

Мой рабочий пример.


twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru friendfeed.com google.com yandex.ru
Комментариев: 16
  1. Интересная идея smile благодарю, возможно где-нибудь можно будет применить

  2. Очень полезная статья - загорелся желанием сделать у себя подобную страницу. Только вот как мне сделать, чтобы ссылка на эту страницу не выводилась наверху сайта (в списке статических страниц)? Подскажите, пожалуйста... :shock:

  3. Зашел поглядеть твой рабочий пример. А вместо списка получил надпись "Эта страница не предназначена для просмотра этим браузером!

    Установи нормальный!" и долго смеялся smile Нерабочий пример ...

  4. Пример рабочий, это браузер нерабочий smile

    Макс, ты придумал замечательную вещь для стимулирования посетителей оставлять посты. Те, у кого есть сайты, будут стремиться теперь попасть в твой TOP-10 smile

  5. Пример рабочий, это браузер нерабочий smile

    конечно конечно smile кто же спорит ... Люди с "рабочим браузером" любят чем-нибудь выделиться :idea:

    Те, у кого есть сайты, будут стремиться теперь попасть в твой TOP-10

    а какой в этом смысл?

  6. а какой в этом смысл?

    Это я на говорю примере данного сайта - МАКС для первых 10 выводит видимую ссылку на сайт. Чисто теоретически кого-то это может стимулировать.

  7. 2007-07-29 в 12:58:13 | Максим

    Про рабочий браузер все немного проще. smile

    Просто я сделал оформление как положено: разные шрифты, sub и списки, а этот ... IE показывает через одно место. Я пробился с ним кучу времени, но получился безумный код. Плюнул, снес и поставил определитель браузера. wink

  8. 2007-07-29 в 13:00:21 | Максим

    2Feelov:

    В функции wp_list_pages() укажите параметр exclude=N, где N - номер исключенной страницы.

  9. А есть неусеченная версия без проверки браузера :-D ?

  10. Максим, несколько не понял вот этого абзаца:

    "Из недостаков данного кода отмечу то, что у меня так и не получилось в одном SQL-запросе сделать так, чтобы суммировались комментарии от одного автора при указанном и отсутствующем адресе."

    Почему бы не делать группировку по e-mail адресу? Указывать сайт или нет - право комментатора, а вот e-mail - поле обязательное для заполнения и соответственно указывающее на 1 пользователя. Имхо конечно.

    Что-то вроде,

    SELECT comment_author, comment_author_email, COUNT(comment_author) AS comment_count, comment_date
    FROM $wpdb->comments
    WHERE comment_approved = '1' AND comment_author_email 'ваш@емейл'
    GROUP BY comment_author_email
    ORDER BY comment_count DESC, comment_date DESC
    LIMIT 100

    comment_approved из селекта убрал, достаточно его в WHERE, всё равно при выводне не используется. И ещё, не плохо бы добавлять ."\n" в строчках, а то код страницы читается с трудом)))

  11. 2007-07-29 в 16:34:44 | Максим

    А как нам получить группировку по comment_author_url? Нужно ведь это поле выводить.

  12. У меня почему-то не получается.:?: Делаю все, как здесь написано - страница вообще не грузится. Если удалить запрос - загружается... может быть там еще что-то нужно править?

  13. 2Максим, тут я думаю можно точно так же взять только последний урл, указаный пользователем.

    Т.е. максимально актуальный.

  14. Feelov, попробуй из кода убрать . У меня тоже не грузилось, убрал и всё нормально.

  15. 2Maksus, я наверное покажусь тупым, но все-таки... что из кода-то убрать?? :???:

  16. Максим, прости за офф топ, но не мог бы ты мне подсказать, как поставить проверку на браузер? IE у меня в блоге стили коверкает, вернее проблема, в основном, только в плеере, его уносит влево В лисе показывает всё чётко. Есть мысль запретить просмотр в IE, но реализация страдает =)

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Комментарий будет опубликован после проверки

(войти без комментирования)

Имя и сайт используются только при регистрации

Авторизация: Loginza.

(обязательно)