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.