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

Рубрика: WordPress -> Плагины и хаки
Воскресенье, 29 июля 2007 г.
Просмотров: 3312
Подписаться на комментарии по RSS
]]>
]]>

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

Для начала сделайте шаблон постоянной страницы. Для этого скопируйте page.php (если его нет, то single.php, или если и этого нет, то index.php) как main-allautorurl.php. После этого удалите в нем цикл TheLoop, который обычно находится в строчках (включая указанные):

  1.  if (have_posts()) : while (have_posts()) : the_post();
  2.  ...
  3.  ...
  4.  <?php endwhile; else:
  5.   echo '<h1>Извините, ничего не найдено...</h1>';
  6.  endif; ?>

Теперь в самое начало файла допишем:

  1.  <?php
  2.  /*
  3.  Template Name: Авторы комментариев (allautorurl)
  4.  */
  5.  ?>

Теперь идем в админку и создаем новую постоянную страницу, где в качестве шаблона выбираем "Авторы комментариев (allautorurl)". Текст можно не писать. Также нужно указать короткую ссылку "allautorurl".

После этого добавьте в ссылку на страницу в сайдбар или меню, в общем, где вам нужно:

  1.  <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 Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>
РЕКЛАМА Качественный монтаж сетей. Скорость и качество. купить хендай гетс hyundai getz

Комментариев: 16

Вы можете получать новые комментарии к этой записи по RSS или оформить подписку на все комментарии сайта. Или даже на все новые записи сайта. (Не знаете, как это сделать?)
  1. 2007-07-29 в 02:31:25 | Friend

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

  2. 2007-07-29 в 04:00:37 | Feelov

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

  3. 2007-07-29 в 12:40:00 | Dimonuch

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

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

  4. 2007-07-29 в 12:44:30 | Alex

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

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

  5. 2007-07-29 в 12:50:48 | Dimonuch
    Пример рабочий, это браузер нерабочий smile

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

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

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

  6. 2007-07-29 в 12:54:04 | Alex
    а какой в этом смысл?

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

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

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

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

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

    2Feelov:

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

  9. 2007-07-29 в 13:07:48 | Friend

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

  10. 2007-07-29 в 16:19:16 | 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. 2007-07-29 в 16:34:44 | Максим

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

  12. 2007-07-29 в 21:52:19 | Feelov

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

  13. 2007-07-30 в 04:26:24 | Tapac

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

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

  14. 2007-07-31 в 14:41:06 | Maksus

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

  15. 2007-07-31 в 15:41:20 | Feelov

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

  16. 2008-08-30 в 02:15:37 | Scr1pt1k

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

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

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки. Если вы зарегистрированы в Твиттере, то перед логином укажите «@», например: @maxsite

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



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

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