ページ削除時に関連メディアを削除


9

注意

自己責任で使用してください。バグが多く、すべての添付ファイルが削除される場合があります。理由がわからない。

ページが削除されたときに、ページに関連付けられたメディアを削除することはできますか?「メディアの挿入」ページで「このページにアップロード」された画像でフィルタリングできることを知っているので、それらのリストを取得して、ページが削除されているときにそれらを削除できますか?

現在、私はDelete Postにフックして遊んでいます。今は...何もしませんが、どこかでうまくいくと思います。

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
他の投稿(他の投稿など)で使用されているメディアへの参照の削除や、投稿がソーシャルメディアで共有されている場合は、注意して削除してください。
Gilbert

ユーザーに同じ画像を2回アップロードするように強制した場合(2つの異なるページに同じ画像が必要な場合)、いずれかの画像の名前が変更されるため、問題ありません。
Howdy_McGee

回答:


8

これはどう?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
私のために働いていませんでした。作成された投稿には1枚の画像、ゴミ箱に投稿された投稿、空のゴミ箱が添付されています。メディアライブラリに画像が残っています。編集:ああ、add_action部分がありません
マイケルロジャース

8

あなたはこのようなものを探していると思います...?

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

私には何もしません。添付されていないメディアの投稿結果を通常どおり削除しても、削除されません。
マイケルロジャース

あなたがコードを適合させない限り、それはページだけのためです。見ましたね、@ MichaelRogers?
tfrommen 2017

失礼します。
マイケルロジャース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.