Описание
Обновляет существующий комментарий в Базе Данных.
Перед обновлением функция проверяет правильное заполнение каждого поля комментария. Если какие-то поля не были указаны, то они будут дополнены из существующего в БД поля.
Функция возвращает числа 1 или 0, в зависимости от удачного или неудачного обновления комментария.
Использование
<?php wp_update_comment( $commentarr ) ?>
Параметры
- $commentarr (массив) (обязательный)
- Массив содержащий информацию о комментарии, которую нужно обновить. Ключи массива — это поля таблицы которые будут обновлены. Обязательно нужно указать поле comment_ID
По умолчанию: нет
Примеры
1. Пример того как можно обновить текст комментария 37:
// Создаем массив данных $commentarr = array(); $commentarr['comment_ID'] = 37; $commentarr['comment_content'] = 'Здесь новый текст комментария'; // Обновляем данные в БД wp_update_comment( $commentarr );
Поля которые можно обновить, следующие:
[comment_post_ID] => 356 [comment_author] => shin [comment_author_email] => shinreg@gmail.com [comment_author_url] => [comment_author_IP] => 94.181.201.110 [comment_date] => 2011-08-16 00:45:37 [comment_date_gmt] => 2011-08-15 20:45:37 [comment_content] => большое спасибо! [comment_karma] => 0 [comment_approved] => 1 [comment_agent] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1 [comment_type] => [comment_parent] => 2036 [user_id] => 0 [comment_subscribe] => Y
wp_update_comment()
из файла: /wp-includes/comment.php WP 3.3.2function wp_update_comment($commentarr) {
global $wpdb;
// First, get all of the original fields
$comment = get_comment($commentarr['comment_ID'], ARRAY_A);
// Escape data pulled from DB.
$comment = esc_sql($comment);
$old_status = $comment['comment_approved'];
// Merge old and new fields with new fields overwriting old ones.
$commentarr = array_merge($comment, $commentarr);
$commentarr = wp_filter_comment( $commentarr );
// Now extract the merged array.
extract(stripslashes_deep($commentarr), EXTR_SKIP);
$comment_content = apply_filters('comment_save_pre', $comment_content);
$comment_date_gmt = get_gmt_from_date($comment_date);
if ( !isset($comment_approved) )
$comment_approved = 1;
else if ( 'hold' == $comment_approved )
$comment_approved = 0;
else if ( 'approve' == $comment_approved )
$comment_approved = 1;
$data = compact('comment_content', 'comment_author', 'comment_author_email', 'comment_approved', 'comment_karma', 'comment_author_url', 'comment_date', 'comment_date_gmt');
$rval = $wpdb->update( $wpdb->comments, $data, compact( 'comment_ID' ) );
clean_comment_cache($comment_ID);
wp_update_comment_count($comment_post_ID);
do_action('edit_comment', $comment_ID);
$comment = get_comment($comment_ID);
wp_transition_comment_status($comment->comment_approved, $old_status, $comment);
return $rval;
}Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
Все мы любим покупать вещи по сниженным ценам. Порой даже хлебом не корми, но дай купить что-нибудь подешевле — скидки. К скидкам можно относиться по-разному, но одного у нас не отнять — мы их обожаем.

Решаю задачу как сделать добавление к тексту в теле сообщения
текста следующего комментария, если эти комментарии от одного пользователя
и следуют друг за другом.
Застопорился на этом:
<?php echo $comments = get_comments_number(); //Номер последнего комментария if ($user_identity == $comment->comment_author) //Сравнение имени пользователя с автором последнего сообщения { echo ' !дописать комментарий! '; // Массив данных для обновления $commentarr = array(); $commentarr['comment_ID'] = get_comments_number(); $commentarr['comment_content'] = $updcomm.'<b>Добавленно позже</b>новый текст комментария'; // Обновление БД wp_update_comment( $commentarr ); } else {echo ' !Обычный режим! ';} ?>Условие If работает, но комментарий не обновляется.
Выдает ошибку Warning: array_merge() [function.array-merge]: Argument #1 is not an array in www\wp-includes\comment.php on line 1315
Что я делаю не так и в какое место файла comments.php следует правильнее вставить этот код?
Если честно, я не понял что надо сделать. Вы пишите одно, а в коде нечто совсем другое.
В коде ошибка: get_comments_number() - это не ID коммента, а число всех комментариев текущей статьи! Вы не правильно используете эту функцию. Такая строка правильная:
Ситуация такая:
У меня на блоге пользователи любят писать по несколько сообщений сразу (подряд). Например:
1 сообщение: Спасибо.
2 сообщение: Интересует такой вопрос ....
3 сообщение: А можно сделать так .....?
И так доходит до 6-7 сообщений подряд от одного пользователя. Сейчас есть страницы где более 200 комментариев.
Чтобы не захломлять страницу и она имела человеческий вид, хочу сделать так:
Если (IF) имя пользователя при оставлении нового сообщения совпадало с именем пользователя оставившего последнее сообщение, ТО: {
новый комментарий не записываем, а дописываем старый. } ИНАЧЕ (ELSE) { проходит процедура стандартного записывания комментария.
Ну что? Есть какие-то идеи?
Идеи есть, делается это через фильтр отвечающий за публикацию комментария. Логика, которую вы предложили, вроде, логичная
Техническую сторону я тут расписывать не буду!
П.С. не задавайте 2 вопроса подряд, как буд-то я вам что-то должен. Плз!
Теперь Вы поняли из-за чего я хочу написать эту доработку!
Техническую сторону писать не прошу, укажите пожалуйста в каком месте и какого файла лучше всего расположить данный фильтр.
Спасибо!
Чтобы внедрится в момент, когда коммент поститься, но еще не записан в БД, используете фильтр preprocess_comment:
function comment_glue(){ // здесь ваша проверка } add_filter('preprocess_comment', 'comment_glue');Использовать этот код нужно будет в functions.php