Excluir mídia associada após exclusão da página

Nota

Use a seu próprio risco, é buggy e passei por algumas ocasiões em que eliminaria TODOS os anexos. Inseguro por quê.

É possível excluir mídia associada a uma página quando essa página é excluída? Eu sei na página Inserir mídia que você pode filtrar por imagens “Carregadas para esta página”, então eu poderia obter uma lista desses e simplesmente excluí-las à medida que a página está sendo excluída?

Agora estou jogando com a conexão com Delete Post. Agora … não faz nada, mas eu acho que estou chegando em algum lugar com ele.

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

Solutions Collecting From Web of "Excluir mídia associada após exclusão da página"

Que tal agora? Ele adapta um exemplo na página de referência da function get_posts () .

 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. } } } add_action( 'before_delete_post', 'delete_post_media' ); 

Suponho que você esteja procurando por algo assim …?

 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 wp_delete_attachment($file->ID); unlink(get_attached_file($file->ID)); } } add_action('before_delete_post', 'delete_associated_media');