dofollow blog
 
Рейтинг блогов
 
 

Сборник полезных хаков для комментариев WordPress. Часть 3

Запись опубликована 24 июня 2010 в 18:07 в категории: WordPress

Привет друзья, давно я ничего не писал о модернизации нашего с вами любимого WordPress. Сегодня решил устранить эту несправедливость. Продолжу цикл публикаций о хаках и модификациях для комментариев в WP. Будет всего два хака, но зато каких!

Для тех, кто не читал предыдущие части, настоятельно рекомендую это сделать: Часть 1 и Часть 2.

И вообще желательно заглянуть в раздел WordPress, там достаточно много интересных наработок, многие из них уникальны и больше нигде не встречаются.

Сегодня мы будем говорить и работать с цифрами. То что у нас получится в итоге, смотрите на скриншоте. Цветом помечены новые фишки, которые могут появиться и у вас, после прочтения данного поста.

wp_comm_numbering

Вывод количества комментариев автора

Это очередная моя разработка, позволяющая вывести количество комментариев комментаторов написанных за все время жизни блога. Пример реализации вы давно могли наблюдать у меня на блоге.

Вы можете кидать в меня помидоры, сказав, что уже видели на некоторых блогах такую фишку. Да, я с вами согласен, она кое-где встречается. Но все это реализовано с помощью плагина, который регулирует наличие тега nofollow в ссылке автора комментария в зависимости от количества оставленных комментариев. Вы можете пользоваться и плагином, ограничив настройками его функционал, тем самым получив только счетчик.

Но я не сторонник плагинов, и потому стараюсь реализовать все с помощью чистого кода. Плюсы этого очевидны – снижение нагрузки, отсутствие лишнего мусора и т.д. Таки я заморочен оптимизацией работы скриптов и производительности в целом.

Но хватит лирики, дайте ближе к делу.

Существует две модификации скрипта. Так случилось, что первая версия однажды показалась мне не совсем верной, и я сделал вторую, но, тем не менее, обе имеют право на жизнь. Первая версия счетчика считает количество комментариев по имени автора (comment_author), а вторая по e-mail (comment_author_email). Очень долгое время у меня был первый вариант, но однажды я подумал, а ведь разных Дмитриев, Василиев и Николаев куча и все это разные люди, а имя одно. Я решил, что это не совсем правильно считать количество комментариев по имени, тем более что даже постоянные комментаторы иногда используют разные имена. Так что теперь у меня на блоге идет подсчет именно по полю e-mail.

Вот вариант №1 для подсчета ПО ИМЕНИ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*** Вывод количества комментов автора по имени (by Alaev)***/
 
add_filter('get_comment_author_link', 'count_author_comm', 11);
 
function count_author_comm($mycommcounter) {
global $wpdb, $comment;
	// Count comments per author name
	$queryString="SELECT COUNT(*) as comments FROM ".$wpdb->comments." WHERE comment_author='".$wpdb->escape($comment->comment_author)."'";
	$comments_count = $wpdb->get_var($queryString);
	// Show comments count per author name
		if ($comment->comment_type != "pingback" && $comment->comment_type != "trackback" && !is_admin()) {
			$mycommcounter .= " (".$comments_count." комм.)";
			return $mycommcounter;
		}
}

А вот вариант №2 для подсчета ПО E-MAIL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*** Вывод количества комментов автора по e-mail (by Alaev)***/
 
add_filter('get_comment_author_link', 'count_author_comm', 11);
 
function count_author_comm($mycommcounter) {
global $wpdb, $comment;
	// Count comments per author mail
	$queryString="SELECT COUNT(*) as comments FROM ".$wpdb->comments." WHERE comment_author_email='".$wpdb->escape($comment->comment_author_email)."'";
	$comments_count = $wpdb->get_var($queryString);
	// Show comments count per author mail
		if ($comment->comment_type != "pingback" && $comment->comment_type != "trackback" && !is_admin()) {
			$mycommcounter .= " (".$comments_count." комм.)";
			return $mycommcounter;
		}
}

Как установить? Все просто, выделяете приведенный код полностью и вставляете в любое место (если не разбираетесь в содержимом файла, то лучше вставить в самое начало) файла functions.php своей темы. Если же файл отсутствует, то его надо создать.

Я думаю, что установка и настройка ни у кого не вызовет трудностей. Но все же если возникнут проблемы, обязательно отписывайтесь в комментариях.

Обнаружилась небольшая поправка, для тех у кого есть вывод трекбеков к записи. Подробнее тут #comment-2462

Так же я очень хочу, чтобы вы поделились своими мыслями и предложениями по доработке, вдруг мы вместе придумаем что-нибудь интересное.

Пару слов о том, зачем вообще эта штука может пригодиться. Ну, во-первых, это будет полезно для владельцев dofollow блогов, с легкостью можно будет вычислить, кто оставил коммент ради ссылки, а кто ради коммента. Во-вторых, это просто приятно, как вам, так и вашим постоянным комментаторам видеть счетчик активности. Можно придумать какие-нибудь бонусы самым активным комментаторам или еще что-то подобное. Все зависит лишь от вашей фантазии. Когда придумаете, обязательно поделитесь и со мной ;)

Вывод порядкового номера комментария к посту

Вещь, вообще говоря, не новая, на многих блогах она есть, но уверен, что в 99% случаев эта фишка была изначально в теме оформления, которую блогеры берут в паблике. Поэтому я думаю, имеет смысл рассказать о реализации данной функции. К тому же тема сегодняшнего поста это цифры. Давайте посмотрим.

Варианта у нас опять два. Первый – для тех, кто НЕ использует постраничный вывод комментариев. Второй, соответственно — для тех, кто его использует. Напомню, что настройку вывода комментариев можно сделать здесь http://your-blog.ru/wp-admin/options-discussion.php

Вариант первый. Открываем файл /wp-includes/comment-template.php и находим там функцию function start_el. Внутри этой функции находим строку:

1
$GLOBALS['comment'] = $comment;

Прямо перед ней добавляем код:

1
2
3
4
global $comment_num;
if(isset($comment_num)) {
	$comment_num++;
} else { $comment_num = 1; }

Просматривая код ниже, мы наткнемся на такую вещь:

1
2
<div class="comment-meta commentmetadata"> … </div>
<?php comment_text() ?>

Так вот где я оставил три точки, будут вызовы различных функций, и если вы не разбираетесь в этом коде, то советую прямо перед закрывающимся </div> вставить код:

1
&nbsp;&nbsp;#<?php echo $comment_num; ?>

В итоге вы получите то же самое, что сейчас реализовано у меня, то есть после даты и времени оставления комментария будет выводиться решетка и порядковой номер комментария.

Вариант второй. Повторюсь, это вариант для тех, кто использует постраничный вывод комментариев. Надо повторить все то же самое, что описано в варианте один, только вместо этого кода:

1
2
3
4
global $comment_num;
if(isset($comment_num)) {
	$comment_num++;
} else { $comment_num = 1; }

Вставлять следующий:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if ( '' === $args['per_page'] && get_option('page_comments') )
	$args['per_page'] = get_option('comments_per_page');
 
if ( empty($args['per_page']) ) {
	$args['per_page'] = 0;
	$args['page'] = 0;
}
 
if ( $args['per_page'] ) {
	if ( '' == $args['page'] )
		$args['page'] = get_query_var('cpage');
	}
$ccomp = ($args['page']-1) * $args['per_page'] ;
 
global $comment_num;
if(isset($comment_num)) {
	$comment_num++;
} else { $comment_num = 1; }

А вместо:

1
<?php echo $comment_num; ?>

Вставлять:

1
<?php echo $comment_num + $ccomp; ?>

Все просто, правда?

Может случиться так, что в вашей теме оформления формирование html шаблона вывода комментария организовано через функцию mytheme_comment (см. codex). В таком случае можно сделать все по аналогии, только изменения вносить не в /wp-includes/comment-template.php а в соответствующее место функции mytheme_comment в файле functions.php.
Если же возникнут проблемы, то пишите, я обязательно распишу этот вариант более подробно, даже полному новичку будет ясно.

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

Была ли эта информация полезной? НетДа (Итоговый рейтинг: +4 / 12)
Загрузка ... Загрузка ...

Так же будет в тему порекомендовать вам блог под названием "Мир WordPress".
 
Получай новости блога АлаичЪ'а на e-mail:
Подпишись на новые комментарии к записи:
 

Советую к прочтению и обсуждению:

Комментариев к записи: 18

  1. Arpjke (7 комм.)

    Думаю оба установлю себе =), спасибо большое за хаки.......

  2. Руслан (4 комм.)

    О как раз то, что надо и своевременно. я как раз собираюсь писать пост по плагинам для комментариев. А тут заглянул в RSS и как раз то что надо=) P. S. Ссылку на этот пос обязательно укажу)

  3. Руслан (4 комм.)

    Блин, почему не придумали плагина для редактирования и исправления отправленного комментария.

    Забыл сказать СПАСИБО автору за подробный обзор

    • АлаичЪ (797 комм.)

      Рад, что попал в тему ;) Буду ждать трекбека.

      А над плагином для редактирования своих комментариев надо подумать. Спасибо за идею.

  4. Еремин (1 комм.)

    Как раз сейчас делаю свой шаблон и хотелось что бы все было функционально сразу. Спасибо, в тему.

  5. TiamatInc (77 комм.)

    Прикрутил себе подобную фишку. Хочу сделать маленькое дополнение для твоих функций вывода счетчика постов. Если их ставить так как ты предлагаешь, ты при выводе трекбеков и пингбеков пропадает ссылка на них, может кому-то это и покажется удобно, но в случае с моим шаблоном, надпись "пишет:" с опущенной перед ней ссылкой на источник смотрится дико.

    Чтобы нормально выводились и эти ссылки, надо добавить следующий код в конец функции после закрывающей скобки в if:

    1
    2
    3
    4
    5
    
    else
    {
    	$mycommcounter .= "";
    	return $mycommcounter;
    }

    Так будет смотреться аккуратнее и счетчика у них не будет. ;-)

    • АлаичЪ (797 комм.)

      Да да да. Я и забыл, была такая штука, я решал это тем, что изменял вывод трекбеков и add_filter в итоге не применялся к трекбекам. Но потом я вообще трекбеки убрал и про это не вспомнил. Добавлю твою поправочку в пост, наверняка кому-нибудь пригодится, раз нам с тобой пригодилось ;)

      • TiamatInc (77 комм.)

        Рад был помочь, пришлось ненадолго вспомнить, что я все-таки программист по образованию. )))

  6. TiamatInc (77 комм.)

    Да тут и не надо быть программистом. Добавить эти фишки дело пяти минут. ;-)

  7. Alexandr (2 комм.)

    Про порядковый номер комментария понравилось, будем внедрять.

    Спасибо за обзор.

  8. Kocmoc (29 комм.)

    Спасибо за хаки. Всё попробовал, полезные штуки. TiamatInc тоже спасибо, внёс свою лепту, молодец. Что-то комментаторов маловато, все на отдых ломанулись, я тоже завтра на 3 дня на рыбалку, а потом на море : )

    • TiamatInc (77 комм.)

      Всегда пожалуйста. Просто когда начал прикручивать себе, наткнулся на проблему. Грех было не поделиться решением.

  9. Александр (3 комм.)

    номера комментариев считаются (условно говоря) сверху вниз. например, при ответе на комментарий #10 создастся комментарий #11, даже если после #10 уже были комментарии ##11, 12, etc. т.е. смысл чисто декоративный.

    • АлаичЪ (797 комм.)

      Ну да, это так. Обычный цикл. Иначе никак. Можно, например, выводить глобальный номер комментария из БД, но я думаю это тем более никому не интересно.

      Эта проблема, о которой вы упомянули, касается только блогов, у которых активирована древовидная схема комментирования.

      • Александр (3 комм.)

        проблема в том, что наличие нумерации создаёт возможность ссылаться на какой-то комментарий в своём сообщении, указывая его номер, который со временем может измениться. что внесёт неразбериху и путаницу. особенно на блогах с активными дискуссиями. Вы, например, понимая это, ссылались в посте на комментарий 2462, а не #7, верно? т.е. возможность, говоря откровенно, даже вредная. в данном случае глобальный номер комментария из БД будет гораздо правильнее и полезнее. особенно, если его сделать активной ссылкой, скопировав которую, получаешь абсолютный адрес комментария (как в случае с #comment-2462), который можно использовать в собственном комментарии. за это, думаю, многие скажут спасибо.

        • АлаичЪ (797 комм.)

          Ну видите ли, обычно на какой-то из комментариев при обсуждении ссылается автор блога, а не комментаторы, участвующие в дискуссии. По крайней мере я видел такое в единичных случаях.

          Так же повторюсь, что касается это только древовидных комментариев.

          Еще я считаю, что показывать глобальный номер это некрасиво (чисто эстетически). А ссылка именно на нужный комментарий она есть. Вот, например, возьмите и наведите сейчас на дату и время оставления комментария и получите прямую ссылку в нужное место.

          Вот ссылка alaev.info/post/1247#comment-3017 на комментарий, оставленный вами, на который я сейчас отвечаю ;)

          • Александр (3 комм.)

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

            с абсолютно ссылкой на конкретный комментарий, содержащейся под датой и временем, согласен. но интуитивно понятней — под номером, как, например, на форумах. впрочем, спор у нас выходит довольно беспредметный. читаю Вас с интересом, учусь новому. спасибо.

          • АлаичЪ (797 комм.)

            Кстати, хорошая идея сделать глобальную ссылку комментария не только на дату, но и на номер. Пожалуй надо будет подправить немного код.

            Спор рождает истину, но в нашем случае просто видно кто к чему привык и в чем теперь уверен.

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

1. Он малоинформативен и оставлен ради ссылки.
2. Ссылка оставленная в поле url ведет не на ваш персональнй блог. (лучше оставить поле пустым)
3. Ваш блог даже отдаленно не связан тематикой с данным блогом.
4. В качестве имени указано ключевое слово.
* - Данные правила могут быть изменены в любое время по усмотрению автора.
** - Ссылки в комменатриях индексируются, т.е. noindex и nofollow отсутствуют