Автоудаление записей, которые старше определённого количества дней

Два варианта. Оба основаны на кроне wp_schedule_event ( ежечасном «hourly» , но это для проверки ). Лучше ( оптимальнее для ресурсов ) использовать ежедневный крон «daily» Для изменения кол-ва дней в функции delete_old_posts нужно поменять $days Первый вариант. Основан на прямой работе с БД

// Добавляем функцию к событию WordPress
function register_daily_cleanup_event() {
	if ( ! wp_next_scheduled( 'daily_cleanup_old_posts' ) ) {
		wp_schedule_event( time(), 'hourly', 'daily_cleanup_old_posts' );
	}
}
add_action( 'wp', 'register_daily_cleanup_event' );

// Удаляем событие при деактивации темы или плагина
function deregister_daily_cleanup_event() {
	$timestamp = wp_next_scheduled( 'daily_cleanup_old_posts' );
	wp_unschedule_event( $timestamp, 'daily_cleanup_old_posts' );
}
register_deactivation_hook( __FILE__, 'deregister_daily_cleanup_event' );

// Функция для удаления записей старше $days дней
function delete_old_posts() {
	global $wpdb;

	$days = 10; // Указываем количество дней
	$date_query = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

	// Подготавливаем запрос для удаления
	$query = $wpdb->prepare( "
		DELETE FROM {$wpdb->posts} 
		WHERE post_type = 'post'
		AND post_status = 'publish'
		AND post_date < %s
	", $date_query );

	// Выполняем запрос
	$wpdb->query( $query );
}
add_action( 'daily_cleanup_old_posts', 'delete_old_posts' );

Второй вариант. Основан на работе с функцией wp_delete_post

// Регистрация ежедневного события
function register_daily_cleanup_event() {
	if ( ! wp_next_scheduled( 'daily_cleanup_old_posts' ) ) {
		wp_schedule_event( time(), 'hourly', 'daily_cleanup_old_posts' );
	}
}
add_action( 'wp', 'register_daily_cleanup_event' );

// Отмена события при деактивации
function deregister_daily_cleanup_event() {
	$timestamp = wp_next_scheduled( 'daily_cleanup_old_posts' );
	wp_unschedule_event( $timestamp, 'daily_cleanup_old_posts' );
}
register_deactivation_hook( __FILE__, 'deregister_daily_cleanup_event' );

// Удаление записей старше 10 дней
function delete_old_posts() {
	$days = 10; // Количество дней
	$date_query = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

	// Получение записей старше 10 дней
	$args = array(
		'post_type'      => 'post',
		'post_status'    => 'publish',
		'date_query'     => array(
			array(
				'before' => $date_query,
				'inclusive' => true,
			),
		),
		'fields'         => 'ids', // Запрашиваем только ID записей
		'posts_per_page' => -1,    // Получить все записи, соответствующие условиям
	);

	$old_posts = get_posts( $args );

	// Удаление каждой записи по её ID
	foreach ( $old_posts as $post_id ) {
		wp_delete_post( $post_id, false );
		// true - для принудительного удаления без перемещения в корзину
		// false- для перемещения в корзину
	}
}
add_action( 'daily_cleanup_old_posts', 'delete_old_posts' );