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


9

Remarque

Utilisez à vos risques et périls, il est bogué et j'ai rencontré plusieurs instances où il supprimerait 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", puis-je obtenir une liste de celles-ci et les supprimer simplement pendant la suppression de la page?

En ce moment, je joue avec la connexion à Delete Post. En ce moment ... ça ne fait rien mais je pense que j'arrive 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');

1
Faites attention à ne pas supprimer les références aux médias qui sont utilisés ailleurs, par exemple, d'autres publications ou si votre publication a été partagée sur les réseaux sociaux.
— Gilbert

Eh bien, si je force l'utilisateur à télécharger deux fois la même image (s'il veut la même image pour 2 pages différentes), il renommera l'une des images, donc ça devrait aller.
— Howdy_McGee

Réponses:


8

Que dis-tu de ça? Il adapte un exemple sur la page de référence de la fonction 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
Ça n'a pas marché pour moi. Le message créé a joint 1 image, le message supprimé, la corbeille vide. L'image est toujours là dans la médiathèque. EDIT: Oh il manque la partie add_action
— Michael Rogers

8

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

Ne fait rien pour moi. La suppression des résultats de publication sur un support non connecté, comme d'habitude, ne le supprime pas.
— Michael Rogers

Sauf si vous avez adapté le code, c'est uniquement pour les pages. Vous l'avez vu, non, @MichaelRogers?
— tfrommen

Gotcha désolé alors!
— Michael Rogers
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.