Sayfa Silme Sonrasında İlişkili Medyayı Sil


9

Not

Kendi sorumluluğunuzdadır kullanın, buggy ve TÜM ekleri sileceği birkaç örnekle karşılaştım. Neden olduğundan emin değilim.

Bir sayfa silindiğinde bir sayfa ile ilişkili ortamları silmek mümkün müdür? Medya Ekle sayfasında "Bu sayfaya yüklendi" resimlerine göre filtre uygulayabileceğinizi biliyorum, böylece bunların bir listesini alabilir ve sayfa silinirken bunları silebilir miyim?

Şimdi, Post'u Sil'i seçerek oynuyorum. Şu anda ... hiçbir şey yapmıyor ama sanırım onunla bir yerlere geliyorum.

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
Başka yayınlarda veya başka yayınlarda veya yayınınız sosyal medyada paylaşılmışsa, başka bir yerde kullanılan ortamlara yapılan referansları silmeye dikkat edin.
Gilbert

Kullanıcıyı aynı görüntüyü iki kez yüklemeye zorlarsam (2 farklı sayfa için aynı görüntüyü istiyorlarsa), görüntülerden birini yeniden adlandırır, bu yüzden iyi olmalıdır.
Howdy_McGee

Yanıtlar:


8

Buna ne dersin? Get_posts () işlevi başvuru sayfasındaki bir örneği uyarlar .

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
Benim için çalışmadı. Oluşturulan yazı ekli 1 resim, çöp kutusu sonrası, boş çöp kutusu. Görüntü hala medya kütüphanesinde. EDIT: Ah add_action bölümü eksik
Michael Rogers

8

Sanırım böyle bir şey mi arıyorsunuz?

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

Benim için hiçbir şey yapmaz. Eklenmemiş medyadaki yayın sonuçlarını her zamanki gibi silmek, onu silmez.
Michael Rogers

Kodu uyarlamadığınız sürece, yalnızca sayfalar içindir. Bunu gördün, değil mi, @MichaelRogers?
tfrommen

Üzgünüm o zaman!
Michael Rogers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.