PHP-функция для WordPress “Ответ на комментарий %username%”
Я придумал и реализовал очередную полезную фигнюшку для WordPress ツ
Суть
Мне очень давно не хватало в WordPress нижеследующих двух простых и, вроде бы, банальных вещей, которые разработчики движка почему-то не додумаются сделать по умолчанию.
Обе функции касаются письма, которое получает администратор сайта после того, как на блоге был добавлен новый комментарий.
Вот о чем я говорю:
- Если на блоге активирована опция “древовидные комментарии”, было бы очень здорово в письме видеть текст о том, кому был оставлен комментарий: мне, как админу, или же кому-то из комментирующих посетителей. По тексту можно будет сразу понять, не заходя в блог, требует этот комментарий моего ответа или нет.
- Так же было бы здорово, если в том же самом письме будет присутствовать прямая ссылка на добавленный комментарий. Опять же это может быть в первую очередь полезно при древовидных комментах. Такая ссылка позволит не искать нужный коммент (ведь он может быть и не в конце списка комментов), а сразу же перейти к нему.
Практика использования этих двух “добавочек” на данном блоге показала, что это весьма полезные штуки. Я уже привык к ним, и в других моих блогах таких функций мне теперь не хватает.
Код PHP-функции
Реализация обоих вещей оказалась довольно простой (эту функцию необходимо запихнуть в файл functions.php
вашей темы, если файла нет, то создать его, не забыв добавить <?php
и ?>
соответственно в начале и в конце файла):
function repliedToComment($text, $comment_id) {
$comment = get_comment($comment_id);
$parent_id = $comment->comment_parent;
$parentComment = get_comment($parent_id);
if ($parent_id > 0) {
if ($parentComment->user_id == 1) {
$text .= "\r\nЭто ответ на мой комментарий.";
} else {
$text .= "\r\nВ ответ на комментарий пользователя: " . $parentComment->comment_author;
}
}
$approved = '';
if ($comment->comment_approved != 1) $approved = ' (необходимо одобрить)';
$text .= "\r\nОтветить" . $approved . ": " . get_comment_link($comment->comment_ID) . "\r\n";
return $text;
}
add_filter('comment_notification_text', 'repliedToComment', 10, 2);
add_filter('comment_moderation_text', 'repliedToComment', 10, 2);
Пожалуй, единственное, на что стоит обратить внимание в этом коде, строка:
if ($parentComment->user_id == 1) {
где цифра 1 – это идентификатор пользователя. Думаю, в большинстве случаев он будет таким же.
Как выглядит результат
Соответствующий текст добавляется к конце письма, и выглядит это примерно следующим образом (кликабельно):
Если это ответ на коммент кого-то из посетителей, то видим текст “В ответ на комментарий пользователя: %username%». Если же это ответ на коммент админа, то текст будет таким: “Это ответ на мой комментарий.” Текст, естественно, можно заменить на какой-то другой.
Плюсом я еще перед прямой ссылкой на комментарий добавил напоминалочку “необходимо одобрить“, если комментарий ожидает модерации.
Что дальше?
- Есть мысль сделать из этого мой очередной плагин.
- Среди пользователей WordPress очень популярен плагин “Subscribe To Comments” (функционал которого, я считаю, уже давно должен быть частью движка), который отправляет письма посетителям сайта, если был оставлен новый коммент. Так вот, если реализовать 2 вышеописанные вещи и для этого плагина, тогда было бы вообще супер – полезность функции существенно бы возросла. Думаю, что это вполне реально сделать.
Комментарии (72)
Думаю плагин был бы полезнее
Мне кажется, отличная идея. У меня в данный момент на блоге вообще нет “древовидного комментаторства”. Все сплошной полосой идёт. И это очень неудобно. Но после смены дизайна, мне бы хотелось, чтобы сообщения именно в таком виде и приходили.
Вот это действительная полезная штука! Спасибо тебе!)))
Я воспользовался вашими советами. Очень удобно, хоть понятно откуда коммент и с чем его есть!
хорошие рекомендации
Здравствуйте, я чото та и не понял возможно ли сделать функцию “Уведомление об ответах на мои комментарии по e-mail”
А можно как-нибудь разбить комментарии на 2 вида, скажем, позитивные и негативные, и пустить их в 2 потока?
Интересная идея
Чем же?? Тормозами при подзагрузке?? Выносить 20 строк кода в отдельный плагин как то глупо выглядит ИМХО. А открыть function.php редактором и Ctrl+C – Ctrl+V неужели так тяжело сделать?? =)
Как вы себе интересно это представляете?? О_О
Я так понимаю, если древовидные комментарии отключены то скрипт становится бесполезен (ну за исключением наличия прямой ссылки)?? И еще, не знаете, будет ли он корректно работать с Comment Referrers (плагин\скрипт показывающий откуда пришел на страницу пользователь)??
А сайт в ссылке первого комментатора и правда жесть. Аж не ожидал =)))
Итересно)) Реализую у себя!
Здравствуйте! Скажите пожалуйста, извиняюсь что не в тему, а у Ваших комментариев кнопка ответить – это стандартная или плагин какой то для древовидных комментариев? Не подскажите?
И не стандартная, и не плагин. Писал под себя скрипт.
А у Вас на блоге не специальной статьи посвященной этому решению? Я заметил что ссылка ответить не содержит replytocom, с которой у меня постоянные проблемы…
Нет, я об этом не писал. На этом блоге стоит WordPress 2.3, поэтому пришлось писать скрипт для древовидных комментариев. А в тех версиях WP, где древовидные поддерживаются стандартно, я никаких проблем не испытывал. Странно, что у вас они есть.
Хорошо, спасибо за столь быстрые ответы!
Дак а куда именно вставлять код.Куда именно-имеется ввиду в начало,середину или в конец php файла?Я поставил в конец и уменя ничего не изменилось.Помоему этот код хрень полная
Если хрень, зачем тогда спрашиваешь?
Скажите, пожалуйста, как возможно настроить ответ на оповещение о необходимости модерации коммента прямо автору коммента, а не wordpress@domain.ru? Заранее спасибо вам!
Не знаю.
Здравствуйте! Извините что не совсем близко к теме, но хотел бы спросить у Вас насчет комментариев. Никак не могу найти информацию как сделать чтобы ссылки в имени комментаторов в новом окне, а в имени автора блога в текущем. Понимаю что нужно через условие If, но методом “тыка” не получается…
Сейчас сделал у себя в /wp-includes/comment-template.php вот так:
Т.е. все ссылки теперь в имени в новом окне, а вот как чтобы у автора блога открывалась в текущем? Буду очень благодарен если подскажете или даже пост напишете об этом)))
До этого у меня вообще все ссылки открывались в текущем окне и посетители просто уходили с блога. Заранее спасибо!
Следующий код нужно вставить в файл functions.php, который в папке с шаблоном:
А файл /wp-includes/comment-template.php лучше не трогать.
Спасибо Вам огромнейшее! Все получилось и прекрасно функционирует! А из comment-template.php все изменения свои убрал, спасибо)
Добрый день, а не могли бы Вы мне подсказать, как сделать такие древовидные комментарии как у Вас, желательно конечно без плагина, я уже весь сайтец перерыл, поиск заюзал, поиск не дал нужного результата!
Заранее спасибо!)
Это стандартная WordPress-функция.
Ну так ее надо как-то в шаблоне прописать правильно ведь? Когда ставлю галочку в админке, ставлю wp_comment_list, ничего не выходит!( Может за денежку сделаете?
Посмотрите, как сделано в других шаблонах. Информацию без проблем можно нагуглить.
Так вот так и делаю и гуглю уже второй день, у меня еще номера комментариев отображаются через переборку foreach
Плохо ищите. http://wphelp.ru/2010/nested-comments.htm
Там я был!) все проделал.) У Tod-а тоже самое написано, по его текстам тоже делал и ничего, что же буду еще разок пробовать, может что-то упустил!(
При включении такой функции, комментарии обновляет новую страницу, добавляя параметр –
но нечего не происходит!(
Здравствуйте!
Вопрос такой, можно ли как то настроить получения писем только на мои комментарии, как админа?
Наверно тема устарела, может даже есть что то лучше, Если да посоветуйте пожалуйста! Я пока что не нашел такой функции….
Заранее спасибо!
Насколько я знаю, в WordPress такой возможности нет.
Не подскажете, как решить проблему с прямой ссылкой на комментарий, если они разбиты по страницам? Похоже, что простой “небьющейся” ссылки просто не существует, так? То есть, придётся адрес вычислять, исходя из количества комментов первого уровня и количества комментов на страницу.
Существует:
Ох! И как это я раньше не сподобилась её найти? Ну что ж, теперь надо использовать её в деле. :) Спасибо.
В wp 4.4. не работает?
Здравствуйте! А как получить имя тому, кому отвечаете в комментарии ? Например, как у вас на сайте : Ваш комментарий для: USERNAME. Спасибо.
Нужно разбираться в jQuery. У меня сделано с помощью него.
Для меня это как на Эвересте подняться, но спасибо за ответ!!!
Извините, все перебрал. А как получить количество ответов на комментарий?
А есть статья по кастомизации текста в оповещении по электронной почте об оставлении нового комментарии на сайте?
Хочу его сделать как можно компактнее, к примеру, убрать Новый комментарий к записи “….название статьи…” ибо всё это есть в заголовке письма