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

Думаю оба установлю себе =), спасибо большое за хаки.......
О как раз то, что надо и своевременно. я как раз собираюсь писать пост по плагинам для комментариев. А тут заглянул в RSS и как раз то что надо=) P. S. Ссылку на этот пос обязательно укажу)
Блин, почему не придумали плагина для редактирования и исправления отправленного комментария.
Забыл сказать СПАСИБО автору за подробный обзор
Рад, что попал в тему ;) Буду ждать трекбека.
А над плагином для редактирования своих комментариев надо подумать. Спасибо за идею.
Как раз сейчас делаю свой шаблон и хотелось что бы все было функционально сразу. Спасибо, в тему.
Прикрутил себе подобную фишку. Хочу сделать маленькое дополнение для твоих функций вывода счетчика постов. Если их ставить так как ты предлагаешь, ты при выводе трекбеков и пингбеков пропадает ссылка на них, может кому-то это и покажется удобно, но в случае с моим шаблоном, надпись "пишет:" с опущенной перед ней ссылкой на источник смотрится дико.
Чтобы нормально выводились и эти ссылки, надо добавить следующий код в конец функции после закрывающей скобки в if:
Так будет смотреться аккуратнее и счетчика у них не будет. ;-)
Да да да. Я и забыл, была такая штука, я решал это тем, что изменял вывод трекбеков и add_filter в итоге не применялся к трекбекам. Но потом я вообще трекбеки убрал и про это не вспомнил. Добавлю твою поправочку в пост, наверняка кому-нибудь пригодится, раз нам с тобой пригодилось ;)
Рад был помочь, пришлось ненадолго вспомнить, что я все-таки программист по образованию. )))
Да тут и не надо быть программистом. Добавить эти фишки дело пяти минут. ;-)
Про порядковый номер комментария понравилось, будем внедрять.
Спасибо за обзор.
Спасибо за хаки. Всё попробовал, полезные штуки. TiamatInc тоже спасибо, внёс свою лепту, молодец. Что-то комментаторов маловато, все на отдых ломанулись, я тоже завтра на 3 дня на рыбалку, а потом на море : )
Всегда пожалуйста. Просто когда начал прикручивать себе, наткнулся на проблему. Грех было не поделиться решением.
номера комментариев считаются (условно говоря) сверху вниз. например, при ответе на комментарий #10 создастся комментарий #11, даже если после #10 уже были комментарии ##11, 12, etc. т.е. смысл чисто декоративный.
Ну да, это так. Обычный цикл. Иначе никак. Можно, например, выводить глобальный номер комментария из БД, но я думаю это тем более никому не интересно.
Эта проблема, о которой вы упомянули, касается только блогов, у которых активирована древовидная схема комментирования.
проблема в том, что наличие нумерации создаёт возможность ссылаться на какой-то комментарий в своём сообщении, указывая его номер, который со временем может измениться. что внесёт неразбериху и путаницу. особенно на блогах с активными дискуссиями. Вы, например, понимая это, ссылались в посте на комментарий 2462, а не #7, верно? т.е. возможность, говоря откровенно, даже вредная. в данном случае глобальный номер комментария из БД будет гораздо правильнее и полезнее. особенно, если его сделать активной ссылкой, скопировав которую, получаешь абсолютный адрес комментария (как в случае с #comment-2462), который можно использовать в собственном комментарии. за это, думаю, многие скажут спасибо.
Ну видите ли, обычно на какой-то из комментариев при обсуждении ссылается автор блога, а не комментаторы, участвующие в дискуссии. По крайней мере я видел такое в единичных случаях.
Так же повторюсь, что касается это только древовидных комментариев.
Еще я считаю, что показывать глобальный номер это некрасиво (чисто эстетически). А ссылка именно на нужный комментарий она есть. Вот, например, возьмите и наведите сейчас на дату и время оставления комментария и получите прямую ссылку в нужное место.
Вот ссылка http://alaev.info/post/1247#comment-3017 на комментарий, оставленный вами, на который я сейчас отвечаю ;)
с первым утверждением совершенно не согласен: в горячих дискуссиях ссылаются все. особенно, когда нет цивилизованной возможности цитировать собеседников. кроме этого, касается это не только древовидных комментариев, но и случаев удаления сообщений (спамерских, оскорбительных, etc).
с абсолютно ссылкой на конкретный комментарий, содержащейся под датой и временем, согласен. но интуитивно понятней — под номером, как, например, на форумах. впрочем, спор у нас выходит довольно беспредметный. читаю Вас с интересом, учусь новому. спасибо.
Кстати, хорошая идея сделать глобальную ссылку комментария не только на дату, но и на номер. Пожалуй надо будет подправить немного код.
Спор рождает истину, но в нашем случае просто видно кто к чему привык и в чем теперь уверен.
Спасибо. Все 3 статьи про хаки комментариев очень даже пригодятся — как раз собираю решения без плагинов для нового блога. Заодно и статью напишу со ссылкой на вас.
Не совсем по теме, но поиск не нашел на блоге... Нет ли у вас поста связанного с ajax комментариями? Хочу сделать на своем блоге, да вот уже 2 плагина попробовал, и они не работают. Можете есть еще другие плагины, или можно самому код нужный вставить...
Нет, такого поста у меня не было. А что надо реализовать и как? Может я смогу помочь с этим делом.
Спасибо, Алаич за отзывчивость. Но плагин уже нашел, называется iF AJAX Comments For WordPress. Делает возможность добавления комментариев без перезагрузки страницы. Это очень удобно, особенно, если на странице 30 больших фотографий. К сожалению, мало кем используется.
Так как, у тебя тут хаки, может быть появится время, сделать хак и на эту тему. Как раз для тех кто не любит использовать плагины, или у для тех у кого они не работают. Я 3 плагина перепробовал, и только 4й заработал. Вероятно, есть куча проблем с совместимостью для разных версий вордпресс.
Ты про хак связанный с AJAX комментариями? Можно попробовать ;)
Ага про них самых :) Правда я не знаю насколько это трудозатратно, я не програмер.
Я сейчас работаю над "допиливанием" движка DLE. Потом, вероятно, займусь и WP.
Спасибо Вам большое! Везде эту информацию искала, но ничего конкретного не нашла. Тоже поставила по емейл, незнаю правильно ли только... но вроде все кажет...