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 .= "rnЭто ответ на мой комментарий.";
} else {
$text .= "rnВ ответ на комментарий пользователя: " . $parentComment->comment_author;
}
}
$approved = '';
if ($comment->comment_approved != 1) $approved = ' (необходимо одобрить)';
$text .= "rnОтветить" . $approved . ": " . get_comment_link($comment->comment_ID) . "rn";
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)
Итересно)) Реализую у себя!
Здравствуйте! Скажите пожалуйста, извиняюсь что не в тему, а у Ваших комментариев кнопка ответить — это стандартная или плагин какой то для древовидных комментариев? Не подскажите?
И не стандартная, и не плагин. Писал под себя скрипт.
А у Вас на блоге не специальной статьи посвященной этому решению? Я заметил что ссылка ответить не содержит 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. У меня сделано с помощью него.
Для меня это как на Эвересте подняться, но спасибо за ответ!!!
Извините, все перебрал. А как получить количество ответов на комментарий?
А есть статья по кастомизации текста в оповещении по электронной почте об оставлении нового комментарии на сайте?
Хочу его сделать как можно компактнее, к примеру, убрать Новый комментарий к записи «…название статьи…» ибо всё это есть в заголовке письма