wp_trash_post

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

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

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

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

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

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

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

Примеры

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

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

wp_trash_post( 15 );

Код из


wp-includes/post.php

WP 4.7.2

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

	if ( !$post = get_post($post_id, ARRAY_A) )
		return $post;

	if ( $post['post_status'] == 'trash' )
		return false;

	/**
	 * Fires before a post is sent to the trash.
	 *
	 * @since 3.3.0
	 *
	 * @param int $post_id Post ID.
	 */
	do_action( 'wp_trash_post', $post_id );

	add_post_meta($post_id,'_wp_trash_meta_status', $post['post_status']);
	add_post_meta($post_id,'_wp_trash_meta_time', time());

	$post['post_status'] = 'trash';
	wp_insert_post( wp_slash( $post ) );

	wp_trash_post_comments($post_id);

	/**
	 * Fires after a post is sent to the trash.
	 *
	 * @since 2.9.0
	 *
	 * @param int $post_id Post ID.
	 */
	do_action( 'trashed_post', $post_id );

	return $post;
}