Функции WordPress

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

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

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

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

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

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

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

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

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

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

Статьи по теме

Кнопка "Вернуться к началу"
Закрыть

Обнаружен Adblock

Пожалуйста, подумайте о том, чтобы поддержать нас, отключив свой блокировщик рекламы!