WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top


Use at your own risk, it is buggy and I have run across a couple instances where it would delete ALL attachments. Unsure why.

Is it possible to delete media associated with a page when that page is deleted? I know in the Insert Media page you can filter by images "Uploaded to this page" so could I get a list of those and just delete them as the page is being deleted?

Right now I'm playing around with hooking into Delete Post. Right now... it does nothing but I think I'm getting somewhere with it.

function del_post_media($pid) {
    $query = "DELETE FROM wp_postmeta
            WHERE ".$pid." IN
            SELECT id
            FROM wp_posts
            WHERE post_type = 'attachment'
    global $wpdb;
    if ($wpdb->get_var($wpdb->prepare($query))) {
        return $wpdb->query($wpdb->prepare($query));
    return true;
add_action('delete_post', 'del_post_media');
share|improve this question
Be careful about deleting references to media that are used elsewhere e.g. other posts or if your post has been shared on social media. – Gilbert Aug 19 '13 at 19:37
Well if I force the user to upload the same image twice (if they want the same image for 2 different pages) it will rename one of the images, so it should be fine. – Howdy_McGee Aug 19 '13 at 20:32
up vote 7 down vote accepted

How about this? It adapts an example on the get_posts() function reference page.

function delete_post_media( $post_id ) {

    $attachments = get_posts( array(
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'any',
        'post_parent'    => $post_id
    ) );

    foreach ( $attachments as $attachment ) {
        if ( false === wp_delete_attachment( $attachment->ID ) ) {
            // Log failure to delete attachment.
share|improve this answer

I suppose you're looking for something like this...?

function delete_associated_media($id) {
    // check if page
    if ('page' !== get_post_type($id)) return;

    $media = get_children(array(
        'post_parent' => $id,
        'post_type' => 'attachment'
    if (empty($media)) return;

    foreach ($media as $file) {
        // pick what you want to do
add_action('before_delete_post', 'delete_associated_media');
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.