Eliminar medios asociados al eliminar la página

9

Nota

Utilícelo bajo su propio riesgo, tiene errores y he encontrado un par de instancias en las que eliminaría TODOS los archivos adjuntos. No estoy seguro de por qué.

¿Es posible eliminar los medios asociados con una página cuando se elimina esa página? Sé que en la página Insertar medios puede filtrar por imágenes "Cargado en esta página", ¿puedo obtener una lista de esas y eliminarlas solo a medida que se borra la página?

Ahora mismo estoy jugando con engancharme en Eliminar publicación. En este momento ... no hace nada, pero creo que estoy llegando a algún lado con él.

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');
    
pregunta Howdy_McGee 12.08.2013 - 19:28

2 respuestas

8

¿Qué tal esto? Adapta un ejemplo en la get_posts () página de referencia de funciones.

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' );
    
respondido por el Charles Clarkson 12.08.2013 - 20:39
8

Supongo que estás buscando algo como esto ...?

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');
    
respondido por el tfrommen 12.08.2013 - 20:37

Lea otras preguntas en las etiquetas