Мой сайт о WordPress и PHP
 
29 июля 2007

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

Читали 4204 раза
Рубрика: Плагины и хаки
Навигация: Главная » WordPress » Плагины и хаки

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

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

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

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

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

  1. Friend:

    Интересная идея :) благодарю, возможно где-нибудь можно будет применить

  2. Feelov:

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

  3. Dimonuch:

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

  4. Alex:

    Пример рабочий, это браузер нерабочий :)

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

  5. Dimonuch:

    Пример рабочий, это браузер нерабочий :)

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

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

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

  6. Alex:

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

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

  7. Максим:

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

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

  8. Максим:

    2Feelov:

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

  9. Friend:

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

  10. Tapac:

    Максим, несколько не понял вот этого абзаца:
    "Из недостаков данного кода отмечу то, что у меня так и не получилось в одном 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. Максим:

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

  12. Feelov:

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

  13. Tapac:

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

  14. Maksus:

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

  15. Feelov:

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


Оставьте комментарий! (Вы согласны с правилами)

 

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

При добавлении кода (html, php) заменяйте < на &lt; и > на &gt;.
Внимание: антиспам - зверь! Копируйте своё сообщение перед отправкой. На всякий случай.