web-dev-qa-db-fra.com

Supprimer le média associé à la suppression de la page

Remarque

Utilisez-le à vos risques et périls, il est bogué et j’ai rencontré quelques cas où il effacerait TOUTES les pièces jointes. Je ne sais pas pourquoi.

Est-il possible de supprimer un média associé à une page lorsque cette page est supprimée? Je sais que dans la page Insérer un média, vous pouvez filtrer par images "Téléchargées sur cette page". Pourrais-je donc en obtenir une liste et les supprimer simplement pendant la suppression de la page?

En ce moment, je joue avec accrocher dans Delete Post. En ce moment ... ça ne fait rien mais je pense que je vais quelque part avec ça.

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

Que dis-tu de ça? Il adapte un exemple sur la page de référence 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' );
8
Charles Clarkson

Je suppose que vous cherchez quelque chose comme ça ...?

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