I am trying to delete a post with its all attachments. This is the function that i came up with right now;

function remove_post(){
            if(isset($_POST['post_id']) && is_numeric($_POST['post_id'])){
                $post = get_post($_POST['post_id']);
                if(get_current_user_id() == $post->post_author){ echo 'ee';


This deletes the post but not the attachments link to that post also its not hard deleting, the post remains in the trash. So what do you think? Thanks.

2 Answers 2


Maybe this works

function remove_post() {

            if(isset($_POST['post_id']) && is_numeric($_POST['post_id'])) {

                $post = get_post($_POST['post_id']);

                if(get_current_user_id() == $post->post_author) { 

                     $args = array(
                             'post_parent' => $_POST['post_id']

                 $post_attachments = get_children($args);

                     if($post_attachments) {

                            foreach ($post_attachments as $attachment) {

                                      wp_delete_attachment($attachment->ID, true);



                          wp_delete_post($_POST['post_id'], true);




The code added

function get_attachment_id_from_src ($image_src) {
  global $wpdb;

  $query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'";
  $id = $wpdb->get_var($query);

  return $id;


if(!empty($_POST['avatar_id'])  && $_POST['avatar_id'] != get_user_meta($current_user->id, 'custom_avatar', true) && empty( $_POST['remove_avatar'])) {

        update_user_meta($current_user->id, 'custom_avatar', esc_attr( $_POST['avatar_id']));

    } elseif(!empty( $_POST['remove_avatar']) && $_POST['remove_avatar'] == 1) {

                $avatar_url = get_user_meta($current_user->id, 'custom_avatar', true);

                $attachment_delete = get_attachment_id_from_src($avatar_url);

                wp_delete_attachment($attachment_delete, true);

        update_user_meta( $current_user->id, 'custom_avatar', '-1');

  • didnt work for me :( Nov 23, 2011 at 23:07
  • it worked but attachments remained
    – boranb
    Nov 23, 2011 at 23:10
  • Try again I did a few changes to the function, meavy that you saw was the cache, you can avoid this with Ctrl + F5, the images should be delete in a short time Nov 24, 2011 at 3:34
  • Andres i also using custom_avatar meta to store the users uploaded avatars. I am removing the avatar like that; pastebin.com/7Dj9Cp9j it removes the avatar but the uploaded files remains. how can i add your solution to this to permanently delete the uploaded images from the server? thanks.
    – boranb
    Nov 24, 2011 at 13:14
  • Where are stored the avatars? in the uploads directory or in a custom directory created for you. A prototype of the url where is located the avatars will be fine. Nov 24, 2011 at 22:57

See the codex for the correct use of wp_delete_post, use

wp_delete_post( $_POST['id'], true );

to bypass the trash


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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