Функция wp_delete_auto_drafts()
в WordPress предназначена для удаления автоматических черновиков (авто-черновиков), которые имеют статус auto-draft
и существуют более 7 дней. Это полезная функция для поддержания порядка в базе данных, так как авто-черновики создаются автоматически при заходе на страницу создания нового поста, но могут оставаться в системе, если пользователь не завершает редактирование.
wp_delete_auto_drafts();
Возвращаемое значение
Функция не возвращает никаких значений (null).
Как работает функция
- Авто-черновики создаются, когда пользователь открывает страницу для добавления нового поста. Когда пост сохраняется впервые, его статус изменяется с
auto-draft
наdraft
. - Функция выполняет SQL-запрос для получения идентификаторов всех постов со статусом
auto-draft
, которые были созданы более 7 дней назад. - Удаление выполняется с помощью функции
wp_delete_post()
, которая удаляет посты без перемещения их в корзину.
Автоматизация удаления
Функция wp_delete_auto_drafts()
автоматически вызывается каждый день с помощью планировщика задач (cron). При этом создается событие, которое запускает удаление авто-черновиков:
if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) {
wp_schedule_event( time(), 'daily', 'wp_scheduled_auto_draft_delete' );
}
add_action( 'wp_scheduled_auto_draft_delete', 'wp_delete_auto_drafts' );
Пример 1: Удаление всех авто-черновиков
Поскольку функция wp_delete_auto_drafts()
не имеет параметров, вы можете просто вызвать её, чтобы удалить все авто-черновики, возрастом более 7 дней:
wp_delete_auto_drafts();
Пример 2: Принудительное удаление авто-черновиков
Если вам нужно удалить все авто-черновики сразу, вы можете создать свою функцию, которая будет использовать wp_delete_auto_drafts()
в сочетании с дополнительной логикой. Например, вы можете добавить кнопку в админ-панели для принудительного удаления всех авто-черновиков:
function custom_delete_auto_drafts() {
if ( isset( $_POST['delete_auto_drafts'] ) ) {
wp_delete_auto_drafts();
echo '<div class="notice notice-success">Авто-черновики удалены!</div>';
}
}
add_action('admin_notices', 'custom_delete_auto_drafts');
function add_delete_button() {
echo '<form method="POST">
<input type="submit" name="delete_auto_drafts" value="Удалить авто-черновики" class="button button-danger">
</form>';
}
add_action('admin_footer', 'add_delete_button');
Пример 3: Запланированное удаление авто-черновиков
Если вы хотите изменить интервал удаления авто-черновиков, вы можете использовать функцию wp_schedule_event()
для создания своего расписания. Например, чтобы удалять авто-черновики каждый час:
if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) {
wp_schedule_event( time(), 'hourly', 'wp_scheduled_auto_draft_delete' );
}
Пример 4: Логирование удаленных авто-черновиков
Если вы хотите вести учет удаленных авто-черновиков, вы можете расширить функцию wp_delete_auto_drafts()
для ведения логов:
function log_deleted_auto_drafts() {
global $wpdb;
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_date < NOW() - INTERVAL 7 DAY" );
foreach ( $old_posts as $post_id ) {
wp_delete_post( $post_id, true );
error_log( "Авто-черновик с ID {$post_id} был удален." );
}
}
add_action( 'wp_scheduled_auto_draft_delete', 'log_deleted_auto_drafts' );
Заключение
Функция wp_delete_auto_drafts()
— это полезный инструмент для управления авто-черновиками в WordPress. Она позволяет автоматически очищать базу данных от устаревших записей, тем самым помогая поддерживать порядок и производительность. Используя приведенные примеры, вы можете адаптировать функциональность под свои нужды и улучшить управление контентом на своем сайте.