borrar post también adjuntos

4

Estoy intentando eliminar una publicación con todos sus archivos adjuntos. Esta es la función que se me ocurrió ahora mismo;

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';
                    wp_delete_post($_POST['post_id']);
                }
            }  

            exit;
        }

Esto elimina la publicación, pero no el vínculo de los archivos adjuntos a esa publicación. Además, no es difícil de eliminar, la publicación permanece en la papelera. ¿Entonces, qué piensas? Gracias.

    
pregunta boranb 23.11.2011 - 23:15

2 respuestas

6

Tal vez esto funcione

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);

                }

            }  

            exit;
}

El código añadido

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');

    }
    
respondido por el Andres Yanez 23.11.2011 - 23:59
0

Consulte el código para el uso correcto de wp_delete_post , use

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

para evitar la basura

    
respondido por el keatch 23.11.2011 - 23:21

Lea otras preguntas en las etiquetas