wp_trash_comment()WP 2.9.0

Перемещает комментарий в корзину.

Запоминает прежний статус комментария и время удаления. Эти данные используются при восстановлении через wp_untrash_comment().

Если EMPTY_TRASH_DAYS = 0, управление передается wp_delete_comment().

При обработке комментария типа note верхнего уровня функция также перемещает в корзину или удаляет его непосредственные дочерние комментарии типа note.

Функция не проверяет права пользователя и nonce. При вызове из пользовательского запроса эти проверки нужно выполнить отдельно.

Обработка дочерних заметок не является транзакцией. Функция может вернуть false, когда родительская заметка уже перемещена в корзину, но обработать одну из дочерних заметок не удалось.

Используйте wp_untrash_comment(), для восстановления комментария.

Используйте wp_delete_comment(), для удаления комментария.

Работает на основе: wp_delete_comment(), wp_set_comment_status()
Хуки из функции

Возвращает

bool.

  • true - комментарий и связанные дочерние заметки успешно перемещены в корзину или удалены.
  • false - комментарий не найден, не удалось изменить его статус или удалить его либо не удалось обработать одну из дочерних заметок.

Использование

wp_trash_comment( $comment_id );
$comment_id(int|WP_Comment) (обязательный)
ID или объект комментария.

Примеры

#1 Перемещение комментария в корзину

Проверяем права текущего пользователя и перемещаем комментарий в корзину:

$comment_id = 123;

if ( current_user_can( 'edit_comment', $comment_id ) ) {
	$result = wp_trash_comment( $comment_id );

	if ( ! $result ) {
		wp_die( 'Не удалось переместить комментарий в корзину.' );
	}
}

Список изменений

С версии 2.9.0 Введена.
С версии 6.9.0 Any child notes are deleted when deleting a note.

Код wp_trash_comment() WP 7.1

function wp_trash_comment( $comment_id ) {
	if ( ! EMPTY_TRASH_DAYS ) {
		$comment = get_comment( $comment_id );
		$success = wp_delete_comment( $comment_id, true );

		if ( ! $success ) {
			return false;
		}

		// Also delete children of top level 'note' type comments.
		if ( $comment && 'note' === $comment->comment_type && 0 === (int) $comment->comment_parent ) {
			$children = $comment->get_children(
				array(
					'fields' => 'ids',
					'status' => 'all',
					'type'   => 'note',
				)
			);

			foreach ( $children as $child_id ) {
				if ( ! wp_delete_comment( $child_id, true ) ) {
					$success = false;
				}
			}
		}

		return $success;
	}

	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	/**
	 * Fires immediately before a comment is sent to the Trash.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    The comment to be trashed.
	 */
	do_action( 'trash_comment', $comment->comment_ID, $comment );

	if ( wp_set_comment_status( $comment, 'trash' ) ) {
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_status' );
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_time' );
		add_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', $comment->comment_approved );
		add_comment_meta( $comment->comment_ID, '_wp_trash_meta_time', time() );

		/**
		 * Fires immediately after a comment is sent to Trash.
		 *
		 * @since 2.9.0
		 * @since 4.9.0 Added the `$comment` parameter.
		 *
		 * @param string     $comment_id The comment ID as a numeric string.
		 * @param WP_Comment $comment    The trashed comment.
		 */
		do_action( 'trashed_comment', $comment->comment_ID, $comment );

		// For top level 'note' type comments, also trash children.
		if ( 'note' === $comment->comment_type && 0 === (int) $comment->comment_parent ) {
			$children = $comment->get_children(
				array(
					'fields' => 'ids',
					'status' => 'all',
					'type'   => 'note',
				)
			);

			$success = true;
			foreach ( $children as $child_id ) {
				if ( ! wp_trash_comment( $child_id ) ) {
					$success = false;
				}
			}
			return $success;
		}

		return true;
	}

	return false;
}