Функция wp_trash_post()
используется для перемещения записи (поста) или страницы в корзину. Если корзина отключена, запись удаляется без возможности восстановления.
Когда запись перемещается в корзину, её статус меняется на trash
, а в метаполе _wp_trash_meta_status
сохраняется предыдущий статус записи. Время перемещения в корзину сохраняется в метаполе _wp_trash_meta_time
. Все комментарии, связанные с записью, получают статус post-trashed
, а их предыдущие статусы записываются в метаполе _wp_trash_meta_comments_status
.
wp_trash_post( int $post_id ): WP_Post|false|null
Функция полезна тем, что сохраняет возможность восстановления записи из корзины, в отличие от функции wp_delete_post()
, которая удаляет запись навсегда. Если корзина отключена (константа EMPTY_TRASH_DAYS
равна false
), функция wp_trash_post()
передает управление wp_delete_post()
для полного удаления записи.
Параметры
$post_id
(int) — ID поста, который необходимо переместить в корзину. Это обязательный параметр.
Возвращаемое значение
- WP_Post — данные поста в случае успешного выполнения функции.
- false или null — если возникла ошибка.
Настройка корзины в WordPress
По умолчанию корзина включена, и записи в ней хранятся 30 дней, после чего удаляются навсегда. Если вы хотите изменить это поведение или отключить корзину, нужно использовать константу EMPTY_TRASH_DAYS
в файле wp-config.php
:
define( 'EMPTY_TRASH_DAYS', false ); // отключение корзины
define( 'EMPTY_TRASH_DAYS', true ); // включение корзины (30 дней по умолчанию)
define( 'EMPTY_TRASH_DAYS', 7 ); // запись хранится 7 дней, затем удаляется
Пример 1. Перемещение записи в корзину
Допустим, у нас есть запись с ID 25
, которую нужно переместить в корзину. Для этого достаточно выполнить следующую команду:
wp_trash_post( 25 );
Пример 2. Удаление записи без корзины
Если корзина отключена (например, с помощью define( 'EMPTY_TRASH_DAYS', false );
), то вызов функции wp_trash_post()
приведет к полному удалению записи. Для этого можно также использовать:
wp_trash_post( 45 );
Пример 3. Обработка ошибок
Иногда нужно проверить, успешно ли запись перемещена в корзину. В этом примере запись с ID 60
перемещается в корзину, и если возникает ошибка, мы выводим сообщение об этом:
$post = wp_trash_post( 60 );
if ( false === $post ) {
echo 'Произошла ошибка при перемещении записи в корзину.';
} else {
echo 'Запись успешно перемещена в корзину.';
}
Предупреждения
- Бесконечный цикл
Если функция wp_trash_post()
вызывается в рамках действия хука save_post
, может возникнуть бесконечный цикл, так как удаление записи вызывает срабатывание этого же хука. Для предотвращения этой ситуации важно удалять хук перед выполнением функции и восстанавливать его после:
add_action( 'save_post', 'my_trash_function' );
function my_trash_function( $post_id ) {
// Удаляем хук, чтобы избежать бесконечного цикла
remove_action( 'save_post', 'my_trash_function' );
// Перемещаем запись в корзину
wp_trash_post( $post_id );
// Восстанавливаем хук
add_action( 'save_post', 'my_trash_function' );
}
- Использование в комбинации с мета-полями
Функция wp_trash_post()
может быть использована совместно с изменением мета-данных записи, что может потребоваться в некоторых сценариях:
$post_id = 75;
update_post_meta( $post_id, 'custom_meta_key', 'New Meta Value' );
wp_trash_post( $post_id );
Заключение
Функция wp_trash_post()
— это удобный инструмент для безопасного удаления записей с возможностью их восстановления. Она поддерживает стандартные записи и страницы, и её использование рекомендовано, когда есть вероятность того, что данные могут понадобиться в будущем.