Eliminar medios asociados al eliminar la página


9

Nota

Use bajo su propio riesgo, es defectuoso y me he encontrado con un par de instancias donde 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 "Subidas a esta página", ¿podría obtener una lista de esas y simplemente eliminarlas a medida que se elimina la página?

En este momento estoy jugando con el enganche en Eliminar publicación. En este momento ... no hace nada, pero creo que estoy llegando a algún lado con eso.

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

1
Tenga cuidado al eliminar referencias a los medios que se utilizan en otros lugares, por ejemplo, otras publicaciones o si su publicación se ha compartido en las redes sociales.
Gilbert

Bueno, si fuerzo al usuario a cargar la misma imagen dos veces (si quieren la misma imagen para 2 páginas diferentes), cambiará el nombre de una de las imágenes, por lo que debería estar bien.
Howdy_McGee

Respuestas:


8

¿Qué tal esto? Adapta un ejemplo en la página de referencia de la función 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' );

1
No funciono para mi. Publicación creada adjunta 1 imagen, publicación en la papelera, papelera vacía. La imagen todavía está allí en la biblioteca de medios. EDITAR: Oh, le falta la parte add_action
Michael Rogers

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

No hace nada por mi. Eliminar los resultados de la publicación en medios no adjuntos, como de costumbre, no lo elimina.
Michael Rogers

A menos que haya adaptado el código, es solo para páginas. Viste eso, ¿verdad, @MichaelRogers?
tfrommen

¡Lo siento, entonces!
Michael Rogers
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.