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

Начал было рассказывать о своей беде товарищу в скайпе, но вдруг понял, что всё не так сложно, как почудилось.
На самом деле достаточно сделать всего пару изменений в одном из файлов шаблона. Откроем comments.php и найдём примерно следующее (примерно, потому что в разных темах по-разному, мой вариант взят из темы Classic):
<p><input type="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" size="22" tabindex="1" />
<label for="author"><small><?php _e('Name'); ?> <?php if ($req) _e('(required)'); ?></small></label></p>
Удалим отсюда теги label и всё, что между ними, уберём оба тега p, значение value заменим на Анонимный комментарий, а значение type — на hidden.
В результате получим следующий код:
<input type="hidden" name="author" id="author" value="Анонимный комментарий" size="22" tabindex="1" />
Сделаем похожие изменения в поле для ввода E-mail, заменим
<p><input type="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" size="22" tabindex="2" />
<label for="email"><small><?php _e('Mail (will not be published)');?> <?php if ($req) _e('(required)'); ?></small></label></p>
на этот код:
<input type="hidden" name="email" id="email" value="noreplay@site.com" size="22" tabindex="2" />
Поле для ввода адреса сайта можем смело удалить, вот каким оно было:
<p><input type="text" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" size="22" tabindex="3" />
<label for="url"><small><?php _e('Website'); ?></small></label></p>
Проверяем результат.

Вот такое нехитрое решение оригинальной проблемы.
Для того, чтобы задизайнить в стиле сайта страницы регистрации, авторизации, настройки профиля и напоминания пароля, я использовал плагин Theme my Login, о котором писал в уроке «Подключение темы WordPress к страницам профиля, регистрации и авторизации» (с тех пор настройки плагина немножко поменялись, имейте в виду).
Желаю вам всего самого оригинального.
Артём Савельев
P.S. Скоро подходит к концу мой марафон. Будем отчитываться =)
А зачем это вообще нужно? Не легче ли поставить модерацию комментариев?
@Денис, возможно беспощадный анонимус будет выдавать жесточайшую критику
Было бы неплохо тогда, что бы ip анонимного комментатора записывалось в бд и потом можно было блочить если оборзеют )
э-э-э!
а развернутый пост по результатам марафона будет?? отрицательный результат — это тоже результат! тем более что работы ведутся на сайтиками правильно же?
Мы хотим знать, почему все так получилось как получилось, на что были сделаны ошибочные ставки и еще много другой полезной информации
@Uran, всё будет в понедельник-вторник =) на данный момент результат не результат, но марафон будет продолжен с плюшками на его исходе для читателей блога =)
Да, в вордпресс подобная фича действительно довольно просто делается.
Ну, а тогда зачем модерация сообщения для анонимных пользователей?
В общем-то, алгоритм действительно несложен, но стоит ли оно того? Анон же может и обидеть, и написать чего-нить нехорошего. Придётся так или иначе модерировать, банить и прочие непопулярные меры принимать, ещё и некоторые вручную
За способ — молодец. Но вот область применения? Честно не знаю.
странное применение, а где же проверка на то, что это зарегистрированный юзер?
http://codex.wordpress.org/Function_Reference/is_user_logged_in
зарегистрированному что будет выдаваться то? имхо надо
порезал коммент
php
if ( is_user_logged_in() ) {
тут старый код который был в шаблоне
} else {
тут твой, с полями, которые ты сделал скрытыми(автор и емэйл)
};
@Желнов Александр, зарегистрированному будет выдаваться то, что нужно вставить вместо фразы «тут старый код который был в шаблоне» — то есть буквально вставить старую форму добавления комментария, её он и получит в результате.
@Артём Савельев, я сам уже запутался….
вообще сама идея автоматом добавлять комментарии без премодерации это жуть, там же заспамят все что можно…. ты пишешь что удалять поле урл из формы, а ведь боты автоматом постят поле урл — есть оно в коде или нет… бот определил что вордпресс, и все постит…. там надо убирать вывод урл, если нет юзера в базе т.е. для не зарегистрированных не выводить поле урл….
а тут надо смотреть несколько функций wp_list_comments
http://codex.wordpress.org/Function_Reference/wp_list_comments использовать ее с параметрами wp_list_comments(‘type=comment&callback=mytheme_comment’)
в functions.php добавить функцию mytheme_comment
т.е. переписать ее под себя и возможно даже какие-то фильтры add_filter применять т.к. править функции самого движка такие как comment_author_link не стоит….
т.е. не все так просто….
или же очень жестко бороться со спамом используя и рекапчу и проверку на куки….
короче я такое не делал т.к. не требовалось никогда….
обычно просто пользователь постит и урл, но если спам то в спам и все…