You can loop through all posts, delete each post, and then remove any associated media files (attachments). Here's a complete script to achieve this:
<?php
// Load WordPress environment
require_once('/path/to/your/wp-load.php');
// Get all posts (any post type)
$args = array(
'post_type' => 'any', // 'any' retrieves all post types (posts, pages, custom post types)
'post_status' => 'any', // 'any' retrieves all post statuses
'posts_per_page' => -1, // Retrieve all posts
);
$all_posts = get_posts($args);
foreach ($all_posts as $post) {
// Get the post ID
$post_id = $post->ID;
// Check if the post has attachments (media files)
$attachments = get_attached_media('', $post_id);
// Delete each attachment associated with the post
foreach ($attachments as $attachment) {
$attachment_id = $attachment->ID;
// This deletes the file from the uploads directory and the database record
wp_delete_attachment($attachment_id, true);
}
// Delete the post itself
wp_delete_post($post_id, true); // true = force delete, bypass trash
}
echo 'All posts and their uploads have been deleted.';