Elimina i media associati alla cancellazione della pagina


9

Nota

Usa a tuo rischio, è difettoso e ho incontrato un paio di casi in cui avrebbe eliminato TUTTI gli allegati. Non so perché.

È possibile eliminare i media associati a una pagina quando tale pagina viene eliminata? So che nella pagina Inserisci media è possibile filtrare in base alle immagini "Caricato in questa pagina", quindi è possibile ottenere un elenco di quelli e cancellarli appena la pagina viene eliminata?

In questo momento sto giocando con l'aggancio a Elimina post. In questo momento ... non fa nulla ma penso che sto arrivando da qualche parte con esso.

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
Fai attenzione a eliminare i riferimenti ai media che vengono utilizzati altrove, ad esempio altri post o se il tuo post è stato condiviso sui social media.
Gilbert,

Bene, se costringo l'utente a caricare la stessa immagine due volte (se vogliono la stessa immagine per 2 pagine diverse) rinominerà una delle immagini, quindi dovrebbe andare bene.
Howdy_McGee

Risposte:


8

Cosa ne pensi di questo? Adatta un esempio nella pagina di riferimento della funzione 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
Non ha funzionato per me. Posta creata allegata 1 immagine, cestino, cestino vuoto. L'immagine è ancora presente nella libreria multimediale. EDIT: Oh, manca la parte add_action
Michael Rogers,

8

Suppongo che stai cercando qualcosa del genere ...?

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

Non fa niente per me. L'eliminazione dei risultati dei post su supporti non collegati come al solito non li elimina.
Michael Rogers,

A meno che tu non abbia adattato il codice, è solo per le pagine. L'hai visto, vero, @MichaelRogers?
martedì

Mi dispiace allora!
Michael Rogers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.