Automatically delete attachments and posts [closed]

You can solve your problem with a WordPress Cron Job. I wrote this code and cron scheduler. Also i tested this code on my localhost.

If you add this code to your theme’s functions.php you can solve your problem. Cron job and function will work every day and search old posts and their attachments for you.

My advise, test this code on your localhost before using on actual website.

<?php 
// Please use this function carefully.
// Changes can't undone. Best regards from Serkan Algur :)
// Let the function begin
function delete_oldest_posts_salgur( ) {
    // We will collect posts from two years ago :)
    $args = array(
        'date_query' => array(
            array(
                'column' => 'post_date_gmt',
                'before' => '2 years ago', // change this definition for your needs
            ),
        ),
        'posts_per_page' => -1,
    );
    // Get posts via WP_Query
    $query = new WP_Query( $args );
    //We are doing this for 'foreach'
    $posts = $query->get_posts();   

        foreach($posts as $post){
            echo $post->ID;
            $args = array(
                'posts_per_page' => -1,
                'order'          => 'ASC',
                'post_mime_type' => 'image', // only for images. Look at https://codex.wordpress.org/Function_Reference/get_children
                'post_parent'    => $post->ID,
                'post_type'      => 'attachment',
            );

            $attachments = get_children( $args );

            if ( $attachments ) {
                foreach ( $attachments as $attachment ) {
                    wp_delete_attachment($attachment->ID,true); //If You Want to trash post set true to false
                }
            }
            wp_delete_post($post->ID,true); //If You Want to trash post set true to false
        }

}

// Problem Solver Cron Job definition
function cron_delete_oldest_posts_salgur() {
    if ( ! wp_next_scheduled( 'delete_oldest_posts_salgur' ) ) {
        wp_schedule_event( current_time( 'timestamp' ), 'daily', 'delete_oldest_posts_salgur' );
    }
}
add_action( 'wp', 'cron_delete_oldest_posts_salgur' );

Leave a Comment