Привет друзья, давно я ничего не писал о модернизации нашего с вами любимого WordPress. Сегодня решил устранить эту несправедливость. Продолжу цикл публикаций о хаках и модификациях для комментариев в WP. Будет всего два хака, но зато каких!
Для тех, кто не читал предыдущие части, настоятельно рекомендую это сделать:
И вообще желательно заглянуть в
Сегодня мы будем говорить и работать с цифрами. То что у нас получится в итоге, смотрите на скриншоте. Цветом помечены новые фишки, которые могут появиться и у вас, после прочтения данного поста.
Вывод количества комментариев автора
Это очередная моя разработка, позволяющая вывести количество комментариев комментаторов написанных за все время жизни блога. Пример реализации вы давно могли наблюдать у меня на блоге.
Вы можете кидать в меня помидоры, сказав, что уже видели на некоторых блогах такую фишку. Да, я с вами согласен, она кое-где встречается. Но все это реализовано с помощью плагина, который регулирует наличие тега 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 своей темы. Если же файл отсутствует, то его надо создать.
Я думаю, что установка и настройка ни у кого не вызовет трудностей. Но все же если возникнут проблемы, обязательно отписывайтесь в комментариях.
Обнаружилась небольшая поправка, для тех у кого есть вывод трекбеков к записи. Подробнее тут
Так же я очень хочу, чтобы вы поделились своими мыслями и предложениями по доработке, вдруг мы вместе придумаем что-нибудь интересное.
Пару слов о том, зачем вообще эта штука может пригодиться. Ну, во-первых, это будет полезно для владельцев 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 |
#<?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 (
Если же возникнут проблемы, то пишите, я обязательно распишу этот вариант более подробно, даже полному новичку будет ясно.
На сегодня все, дорогие мои. Надеюсь, что мои наработки в очередной раз окажутся для вас полезными. Буду благодарен за любые отзывы и комментарии.