wake-up-neo.com

Verknüpfte Medien beim Löschen einer Seite löschen

Hinweis

Verwendung auf eigenes Risiko, es ist fehlerhaft und ich habe einige Instanzen durchlaufen, in denen ALLE Anhänge gelöscht wurden. Unsicher warum.

Ist es möglich, Medien zu löschen, die einer Seite zugeordnet sind, wenn diese Seite gelöscht wird? Ich weiß, dass Sie auf der Seite "Medien einfügen" nach Bildern filtern können, die auf diese Seite hochgeladen wurden. Könnte ich eine Liste dieser Bilder erhalten und sie einfach löschen, während die Seite gelöscht wird?

Im Moment spiele ich mit Delete Post. Momentan ... tut es nichts, aber ich glaube, ich komme damit klar.

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

Wie wäre es damit? Es passt ein Beispiel auf der get_posts () Funktionsreferenzseite an.

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

Ich nehme an, Sie suchen so etwas ...?

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