PHP-функция для WordPress “Ответ на комментарий %username%”

24 декабря 2009 г.

PHP-функция для WordPress 'Ответ на комментарий %username%' Я придумал и реализовал очередную полезную фигнюшку для WordPress ツ

Суть

Мне очень давно не хватало в WordPress нижеследующих двух простых и, вроде бы, банальных вещей, которые разработчики движка почему-то не додумаются сделать по умолчанию.

Обе функции касаются письма, которое получает администратор сайта после того, как на блоге был добавлен новый комментарий.

Вот о чем я говорю:

  1. Если на блоге активирована опция “древовидные комментарии”, было бы очень здорово в письме видеть текст о том, кому был оставлен комментарий: мне, как админу, или же кому-то из комментирующих посетителей. По тексту можно будет сразу понять, не заходя в блог, требует этот комментарий моего ответа или нет.
  2. Так же было бы здорово, если в том же самом письме будет присутствовать пряма ссылка на добавленный комментарий. Опять же это может быть в первую очередь полезно при древовидных комментах. Такая ссылка позволит не искать нужный коммент (ведь он может быть и не в конце списка комментов), а сразу же перейти к нему.

Практика использования этих двух “добавочек” на данном блоге показала, что это весьма полезные штуки. Я уже привык к ним, и в других моих блогах таких функций мне теперь не хватает.

Код PHP-функции

Реализация обоих вещей оказалась довольно простой (эту функцию необходимо запихнуть в файл functions.php вашей темы, если файла нет, то создать его, не забыв добавить <?php и ?> соответственно в начале и в конце файла):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);

Пожалуй, единственное, на что стоит обратить внимание в этом коде, строка:

1
if ($parentComment->user_id == 1) {

где цифра 1 - это идентификатор пользователя. Думаю, в большинстве случаев он будет таким же.

Как выглядит результат

Соответствующий текст добавляется к конце письма, и выглядит это примерно следующим образом (кликабельно):

PHP-функция для WordPress 'Ответ на комментарий %username%'

Если это ответ на коммент кого-то из посетителей, то видим текст “В ответ на комментарий пользователя: %username%“. Если же это ответ на коммент админа, то текст будет таким: “Это ответ на мой комментарий.” Текст, естественно, можно заменить на какой-то другой.

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

Что дальше?

  1. Есть мысль сделать из этого мой очередной плагин.
  2. Среди пользователей WordPress очень популярен плагин “Subscribe To Comments” (функционал которого, я считаю, уже давно должен быть частью движка), который отправляет письма посетителям сайта, если был оставлен новый коммент. Так вот, если реализовать 2 вышеописанные вещи и для этого плагина, тогда было бы вообще супер - полезность функции существенно бы возросла. Думаю, что это вполне реально сделать.
Теги: , , автор: Dimox | рубрика WordPress

Комментарии (31): »

  1. Dimox, если бы ты хоть раз оставил сообщение у меня в блоге и тебе кто-нибудь ответил, ты бы увидел, что сложного ничего в таком плагине нет. Более того, достаточно просто чуть-чуть подправить исходник S2C.

    Короче - у меня реализована система как в LJ - когда ответить на комментарий можно сразу из полученного письма о новом комментарии.
    Как-то так :)

  2. Ну вот, я это же и хочу, только чтоб без правки S2C, отдельным плагином =) Можешь показать скрины, как у тебя это выглядит?

    P.S. На каком-то другом твоем блоге я может и оставил бы коммент, но только не на том, что под твоим ником =\

  3. Ну, если речь идет о древовидных комментариях, то актуальнее всего (имхо) выла бы функция “Уведомление об ответах на мои комментарии по e-mail”

    @
  4. Я бы от такой функции тоже не отказался. На хабре, например, именно так и сделано, мне очень нравится. Не помню точно, но, вроде бы, я где-то встречал подобное на WordPress. Вполне возможно, что есть плагин с такой функцией.

  5. Стесняешься… Ну-ну.

    У меня не отдельным плагином - а переработка S2C.
    Я могу просто прислать его но давно идея уже есть просто сделать его отдельным плагином доступным населению - с шаблонизатором, преводами и все такое..

  6. о. давно мечтаю об ответах прямо из письма как в жж. где взять?

    @
  7. Судя по всему, надо делать.
    Задание понял :)

  8. Спасибо за “очередную полезную фигнюшку для WordPress” - она действительно добавляет очень приятные ощущения! С вашего разрешения (и разумеется ссылаясь) описал-бы этот прием в своем блоге.
    По поводу id: первое, что я делаю после установки нового WordPress - удаляю юзера с id=1, также что советую делать всем читателям блога в своих уроках =)

    @
  9. Если всё перечисленное выше “скрестить” с “Subscribe To Comments” будет воплощение мечты любого.
    Реально нужная вещь!

  10. 10
    Андрей Степанов

    По поводу комментов на сайте “ioni”, то ты прав :-)
    После перехода на него, меня очень улыбнуло, постарался быстрее закрыть :-)
    Пусть он хоть будет Doffolow, с PR 5, я пас :-)
    А на счет комментов, я вообще хочу поставить Disques, мне нравится! Только реалезую уже на новом дизайне, так как в этот не совсем вписывается!
    Ты что думаешь на счет этой системы комментариев? Интересно было бы услышать твое мнение!

  11. Не вижу необходимости и смысла в использовании сторонней системы для комментариев.

  12. А зря закрыл, там много интересного.

    В любом случае Disqus он, конечно, хорош - но до определенной степени. Он как бы ненужное продолжени OpenID (которе у меня полновстью реализовано, да!) - потому что убирает необходимость регистрации и добавляет кармы коммнентаторам.

    Но!
    У меня такой вопрос - вот придешь ты, Андрей Степанов, ко мне со своим OpenID или даже акаунтом в Disqus. Ничего по теме сказать навернка не сможешь (если речь, конечно, не идет к примеру о любимом мной Александре Лукашенко) - а например у Димоха - очень даже.

    Аналогично я не смогу здраво рассуждать на макроэкономические теы или о футболе, зато дай поспорить о регилии или политике. Каким образом Disqus будет учитывать мою ньюбскую карму макроэкономиста против моей вполне солидной политической?

    Вот собственно говоряи вопрос. Гугл со своими профилями старается разрешить сию проблему - но до нормального решения еще далеко. Как я говорил по этому поводу еще на первом киевском баркепме: “а вдруг на одном из ресурсов я- пятнадцатилетняя девочка? Как мне карму считать?”

  13. Иду прибывать - если не получится отпишу тут.

  14. Если уж говорить о таких системах как Disqus, то имхо: круче IntenseDebate

    @
  15. Dimox, я когда-то реализовывал подобную вещь в Subscribe to Comments (наряду с другими патчами, повышающими производительность), но не выкладывал модифицированную версию в общий доступ.

    Если кому интересно, лежит здесь.

    @
  16. А смысл в чём удалять автора с id=1? Авторов блога очень легко вычислить: blogname.com/?author=ID (перебор по ID).

    @
  17. Проще сразу удалить, чем потом вычислять. ихмо…

  18. IntenseDebate дырявый.
    Можно зайти и случайно оказаться “администратором”.
    Были преценденты.

  19. Уважаемый автор, Ваш блог просто находка для шпиона!! с хорошей стораны конечно!!!

  20. Интересная идея. Надо будет попробовать добавить такую функцию. Скажите пожалуйста, в каком случае $parent_id будет меньше 0?

  21. Меньше нуля быть не может, только либо равно нулю, либо больше нуля.

  22. Меньше нуля не будет. Равно нулю, когда комментарий является комменатрием верхнего уровня (не имеет предка).

    @
  23. Тогда $parentComment = get_comment($parent_id); лучше добавить в условие if ($parent_id > 0), чтобы лишний раз не вычислять, если $parent_id==0

  24. ну тогда еще стоит вспомнить, что ссылка в админке на открытие сайта лучше бы смотрелось с target=”_blank”, а не открывала сайт в том же окне, что и админка.

  25. А при чем здесь админка?

  26. Все правильно изложено, чего тут скрывать.
    To Defite > на сколько мне известно в последнее время target=”_blank” вне закона. Ну в смысле в HTML 5.0 это не будет поддерживаться.

  27. на сколько мне известно в последнее время target=”_blank” вне закона. Ну в смысле в HTML 5.0 это не будет поддерживаться.

    Неверная информация. target=”_blank” собирались убрать в XHTML2, а в HTML5 он поддерживается.

  28. Сорри что не в тему, просто Гоша нашел только Тебя (запрос: индексируются ли комментарии disques, intensedebate), ну и вопрос вот такой: Disqus и IntenseDebate - вроде скрипты, то есть в тэги noindex-no follow их закрывать не придется?

  29. Не пользовался ни тем, ни другим, поэтому не знаю. Если в коде страницы содержится текст комментариев, значит индексируются.

  30. Спасибо, это то, что я когда-то искал и не нашел. Делайте плагин!

  31. 31
    Дмитрий

    Думаю плагин был бы полезнее

Присоединяйтесь к обсуждению!

Отправляя кoммeнтapий, Вы автоматически принимаете правила кoммeнтиpoвaния на этом блоге.

Правила кoммeнтиpoвaния на блоге dimox.name:

  1. Первый кoммeнтapий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный кoммeнтapий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.

Подписаться, не комментируя

Предыдущие из рубрики