wp_trash_post()WP 2.9.0

Перемещает указанную запись (пост) в корзину. Если корзина отключена, то запись будет удалена навсегда.

При перемещении записи в корзину ей устанавливается статус trash. В метаполе _wp_trash_meta_status сохраняется её предыдущий статус и в метаполе _wp_trash_meta_time записывается время перемещения в корзину. Также, все комментарии записи получают статус post-trashed (в поле comment_approve), а прежние статусы комментариев поста записываются в метаполе поста '_wp_trash_meta_comments_status'. Все это нужно для восстановления записи из корзины.

Если, при вызове этой функции, константа EMPTY_TRASH_DAYS=false, то управление полностью передается функции wp_delete_post().

Всегда лучше использовать эту функцию вместо wp_delete_post(). Впрочем, wp_delete_post() передает управление wp_trash_post(), если корзина включена и тип записи равен post или page. Для произвольных типов wp_delete_post() всегда удаляет запись.

Настройка корзины в WordPress

По умолчанию в WordPress корзина включена и записи в ней храняться 30 дней, после чего удаляются навсегда. Отключается она путем установки (определения) константы EMPTY_TRASH_DAYS=false. Определять константу нужно в файле конфигурации wp-config.php:

define( 'EMPTY_TRASH_DAYS', false ); // корзина отключена
define( 'EMPTY_TRASH_DAYS', true );  // корзина включена. По умолчанию в WP
define( 'EMPTY_TRASH_DAYS', 30 );    // корзина включена и записи в ней будут храниться 30 дней, после чего будут удалены.

Как отключить корзину для отдельных типов записей смотрите в сатье: Как отключить корзину в WordPress

Используйте, wp_untrash_post(), когда нужно програмно вернуть запись из корзины.

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

Хуки из функции

Возвращает

WP_Post|false|null. Массив данных записи (поста) или false.

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

wp_trash_post( $post_id );
$post_id(число) (обязательный)
ID поста. По умолчанию передается значение глобальной переменной $post.

Примеры

0

#1 Переместим запись в корзину

Если корзина включена, то переместим запись с ID=15 в корзину. Запись будет находиться в корзине 30 дней, в течении которых мы можем её восстановить. По истечении 30 дней, запись будет удалена полностью.

wp_trash_post( 15 );

Заметки

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

С версии 2.9.0 Введена.

Код wp_trash_post() WP 6.5.2

function wp_trash_post( $post_id = 0 ) {
	if ( ! EMPTY_TRASH_DAYS ) {
		return wp_delete_post( $post_id, true );
	}

	$post = get_post( $post_id );

	if ( ! $post ) {
		return $post;
	}

	if ( 'trash' === $post->post_status ) {
		return false;
	}

	$previous_status = $post->post_status;

	/**
	 * Filters whether a post trashing should take place.
	 *
	 * @since 4.9.0
	 * @since 6.3.0 Added the `$previous_status` parameter.
	 *
	 * @param bool|null $trash           Whether to go forward with trashing.
	 * @param WP_Post   $post            Post object.
	 * @param string    $previous_status The status of the post about to be trashed.
	 */
	$check = apply_filters( 'pre_trash_post', null, $post, $previous_status );

	if ( null !== $check ) {
		return $check;
	}

	/**
	 * Fires before a post is sent to the Trash.
	 *
	 * @since 3.3.0
	 * @since 6.3.0 Added the `$previous_status` parameter.
	 *
	 * @param int    $post_id         Post ID.
	 * @param string $previous_status The status of the post about to be trashed.
	 */
	do_action( 'wp_trash_post', $post_id, $previous_status );

	add_post_meta( $post_id, '_wp_trash_meta_status', $previous_status );
	add_post_meta( $post_id, '_wp_trash_meta_time', time() );

	$post_updated = wp_update_post(
		array(
			'ID'          => $post_id,
			'post_status' => 'trash',
		)
	);

	if ( ! $post_updated ) {
		return false;
	}

	wp_trash_post_comments( $post_id );

	/**
	 * Fires after a post is sent to the Trash.
	 *
	 * @since 2.9.0
	 * @since 6.3.0 Added the `$previous_status` parameter.
	 *
	 * @param int    $post_id         Post ID.
	 * @param string $previous_status The status of the post at the point where it was trashed.
	 */
	do_action( 'trashed_post', $post_id, $previous_status );

	return $post;
}