Приветствую!
Не так давно я дал возможность посетителям сайта codeseller.ru исправлять свои опубликованные комментарии в течении двух минут после публикации этого комментария, что, конечно, повысило удобство комментирования на сайте.
Хочу поделиться реализацией такой возможности со всеми кому это будет интересно.
Первое, что мы должны сделать, это проверить является ли текущий пользователь автором комментария и если является, то сравнить время публикации комментария с текущим временем и если текущее время не превышает двух минут от момента публикации, то выводить под комментарием скрытую форму редактирования комментария со ссылкой на показ этой формы.
if(!is_admin()) add_filter('comment_text','add_edit_link_ct',10,2); function add_edit_link_ct($text,$comment){ global $user_ID; if(!$user_ID||$user_ID!=$comment->user_id) return $text; $time_edit = 120;//Допустимое время редактирования комментария в секундах $time_action = current_time('mysql'); $unix_time_action = strtotime($comment->comment_date); $unix_time = strtotime($time_action); if($unix_time > $unix_time_action+$time_edit) return $text; $text .= ' <a href="#" class="fa fa-edit edit-comment-ct">(Править)</a> <form method="post" action="" class="edit-form-ct comment-form"> <textarea required class="wp-editor-area" rows="5" cols="40" name="comment">'.esc_textarea($text).'</textarea> <input type="submit" value="Править"> <input type="hidden" name="comment-edit-ct" value="'.$comment->comment_ID.'"> '.wp_nonce_field('comment-edit-ct','_wpnonce',true,false).' </form>'; return $text; }
Добавим в файл скриптов своего шаблона jQuery-скрипт появления формы редактирования комментария:
jQuery(function(){ jQuery('.edit-comment-ct').click(function() { jQuery(this).parent().next('.edit-form-ct').slideToggle(); return false; }); });
Осталось добавить функцию обработки данных с формы редактирования:
function comment_edit_ct ( ) { if ( isset( $_POST['comment-edit-ct'] ) ) { if( !wp_verify_nonce( $_POST['_wpnonce'], 'comment-edit-ct' ) ) return false; $commentarr = array(); $commentarr['comment_ID'] = $_POST['comment-edit-ct']; $commentarr['comment_content'] = force_balance_tags($_POST['comment']); wp_update_comment( $commentarr ); wp_redirect(get_comment_link($_POST['comment-edit-ct'])); exit; } } add_action('init', 'comment_edit_ct');
Добавим минимально необходимые css-стили в качестве финального штриха:
.edit-form-ct{ overflow:hidden; clear:both; display:none; } .edit-form-ct textarea{ width:100%; }
После этого все должно работать.
Я добавил в скрипт поддержку шрифтовых иконок плагина wp-recall, поэтому если у вас установлен этот плагин, то к ссылке изменения комментария добавиться симпатичная иконка).
Удачи!
Тест исправления комментария!
Работает! Но только отредактировать получается, удалить напрямую невозможно я так понимаю.
Если немного отредактировать предложенный код, то можно будет и удалять комментарии 😉
Работает как часы)))
тестирую, так-так-так
test
а в какие файлы добавлять данный код? я так понимаю минимум 3 файла править какие именно можно узнать
php-функции надо добавлять в файл функций шаблона, js - в файл с js-скриптами, а код-css в стилевой файл шаблона.
спасибо все получилось
Спасибо вам огромное. Всё получилось. Поделился статьёй в ВК - надеюсь это вам хоть немного поможет в вашем деле.