WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

wp_update_comment() WP 2.0.0

Обновляет существующий комментарий в Базе Данных.

Перед обновлением функция проверяет правильное заполнение каждого поля комментария. Если какие-то поля не были указаны, то они будут дополнены из существующего в БД поля.

Все передаваемые данные обрабатываются wp_unslash() самой функцией, поэтому не нужно заранее удалять слэши с полученного значения $_POST запроса...

Хуки из функции:
Возвращает

Числа 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 4.8.1

<?php
function wp_update_comment($commentarr) {
	global $wpdb;

	// First, get all of the original fields
	$comment = get_comment($commentarr['comment_ID'], ARRAY_A);
	if ( empty( $comment ) ) {
		return 0;
	}

	// Make sure that the comment post ID is valid (if specified).
	if ( ! empty( $commentarr['comment_post_ID'] ) && ! get_post( $commentarr['comment_post_ID'] ) ) {
		return 0;
	}

	// Escape data pulled from DB.
	$comment = wp_slash($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.
	$data = wp_unslash( $commentarr );

	/**
	 * Filters the comment content before it is updated in the database.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_content The comment data.
	 */
	$data['comment_content'] = apply_filters( 'comment_save_pre', $data['comment_content'] );

	$data['comment_date_gmt'] = get_gmt_from_date( $data['comment_date'] );

	if ( ! isset( $data['comment_approved'] ) ) {
		$data['comment_approved'] = 1;
	} elseif ( 'hold' == $data['comment_approved'] ) {
		$data['comment_approved'] = 0;
	} elseif ( 'approve' == $data['comment_approved'] ) {
		$data['comment_approved'] = 1;
	}

	$comment_ID = $data['comment_ID'];
	$comment_post_ID = $data['comment_post_ID'];

	/**
	 * Filters the comment data immediately before it is updated in the database.
	 *
	 * Note: data being passed to the filter is already unslashed.
	 *
	 * @since 4.7.0
	 *
	 * @param array $data       The new, processed comment data.
	 * @param array $comment    The old, unslashed comment data.
	 * @param array $commentarr The new, raw comment data.
	 */
	$data = apply_filters( 'wp_update_comment_data', $data, $comment, $commentarr );

	$keys = array( 'comment_post_ID', 'comment_content', 'comment_author', 'comment_author_email', 'comment_approved', 'comment_karma', 'comment_author_url', 'comment_date', 'comment_date_gmt', 'comment_type', 'comment_parent', 'user_id', 'comment_agent', 'comment_author_IP' );
	$data = wp_array_slice_assoc( $data, $keys );

	$rval = $wpdb->update( $wpdb->comments, $data, compact( 'comment_ID' ) );

	clean_comment_cache( $comment_ID );
	wp_update_comment_count( $comment_post_ID );
	/**
	 * Fires immediately after a comment is updated in the database.
	 *
	 * The hook also fires immediately before comment status transition hooks are fired.
	 *
	 * @since 1.2.0
	 * @since 4.6.0 Added the `$data` parameter.
	 *
	 * @param int   $comment_ID The comment ID.
	 * @param array $data       Comment data.
	 */
	do_action( 'edit_comment', $comment_ID, $data );
	$comment = get_comment($comment_ID);
	wp_transition_comment_status($comment->comment_approved, $old_status, $comment);
	return $rval;
}

Cвязанные функции

Из раздела: Комментарии

Http://www.s-volvo.ru/

http://www.s-volvo.ru/ made техобслуживание автомобилей Вольво.

www.s-volvo.ru

wp_update_comment 7 комментариев
  • Joliat cайт: best-chart.ru

    Решаю задачу как сделать добавление к тексту в теле сообщения
    текста следующего комментария, если эти комментарии от одного пользователя
    и следуют друг за другом.
    Застопорился на этом:

    <?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 следует правильнее вставить этот код?

    Ответить5.9 лет назад #
    • Kama4472

      Если честно, я не понял что надо сделать. Вы пишите одно, а в коде нечто совсем другое.

      В коде ошибка: get_comments_number() - это не ID коммента, а число всех комментариев текущей статьи! Вы не правильно используете эту функцию. Такая строка правильная:
      ``php
      $commentarr['comment_ID'] = $comment->comment_ID;

      Ответить5.9 лет назад #
  • Joliat cайт: best-chart.ru

    Ситуация такая:
    У меня на блоге пользователи любят писать по несколько сообщений сразу (подряд). Например:
    1 сообщение: Спасибо.
    2 сообщение: Интересует такой вопрос ....
    3 сообщение: А можно сделать так .....?

    И так доходит до 6-7 сообщений подряд от одного пользователя. Сейчас есть страницы где более 200 комментариев.

    Чтобы не захломлять страницу и она имела человеческий вид, хочу сделать так:
    Если (IF) имя пользователя при оставлении нового сообщения совпадало с именем пользователя оставившего последнее сообщение, ТО: {
    новый комментарий не записываем, а дописываем старый. } ИНАЧЕ (ELSE) { проходит процедура стандартного записывания комментария.

    Ответить5.9 лет назад #
  • Joliat cайт: best-chart.ru

    Ну что? Есть какие-то идеи?

    Ответить5.9 лет назад #
    • Kama4472

      Идеи есть, делается это через фильтр отвечающий за публикацию комментария. Логика, которую вы предложили, вроде, логичная smile Техническую сторону я тут расписывать не буду!

      П.С. не задавайте 2 вопроса подряд, как буд-то я вам что-то должен. Плз!

      Ответить5.9 лет назад #
  • Joliat cайт: best-chart.ru

    Теперь Вы поняли из-за чего я хочу написать эту доработку! smile
    Техническую сторону писать не прошу, укажите пожалуйста в каком месте и какого файла лучше всего расположить данный фильтр.

    Спасибо!

    Ответить5.9 лет назад #
    • Kama4472

      Чтобы внедрится в момент, когда коммент поститься, но еще не записан в БД, используете фильтр preprocess_comment:

      function comment_glue(){
         // здесь ваша проверка
      }
      add_filter('preprocess_comment', 'comment_glue');

      Использовать этот код нужно будет в functions.php

      1
      Ответить5.9 лет назад #

Здравствуйте, !

Ваш комментарий