Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Полезное

Приветствую!

Не так давно я дал возможность посетителям сайта 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, поэтому если у вас установлен этот плагин, то к ссылке изменения комментария добавиться симпатичная иконка).

Удачи!

40

Автор публикации

не в сети 9 часов

Андрей CS

12K
рассматриваю задания
Комментарии: 2744Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0