web-dev-qa-db-ja.com

すべてのファイルが添付された投稿を削除

私のサイトには複数の作者がいます。彼らはカスタム投稿を追加/編集/削除してそれらの投稿に画像をアップロード(添付)できます。問題は、投稿を削除しても添付ファイルがサーバーに残ることです。だから、私はそれが削除されたときに私は記事に添付されたすべてのファイルを取り除きたいと思います。誰がそれをどのようにして行ったかを共有し、例証できますか?

5
Kovas

添付ファイルが他の投稿で使用されていないという保証はないため、WPはデフォルトでこれを行いません。

基本的なロジックは、delete_postにフックし、子添付ファイルを照会し、それぞれに対して wp_delete_attachment() を実行することです。

私はプラグインリポジトリでクイック検索をして、それをする小さなプラグインを思い付きました(メンテナンスされていないようなので使用前にテストしてください) - Post Data Delete Advanced

3
Rarst

私は、@ arstによって提案された論理を使用する以下の関数を彼の答えに書きました。

add_action( 'before_delete_post', function( $id ) {
  $attachments = get_attached_media( '', $id );
  foreach ($attachments as $attachment) {
    wp_delete_attachment( $attachment->ID, 'true' );
  }
} );

重要:覚えておいてください投稿がゴミ箱から完全に削除されたときにのみ呼び出されますこれを変更したい場合wp-config.phpファイルに次の行を追加してください。

define('EMPTY_TRASH_DAYS', 0);

この定数を0に設定すると、ゴミ箱機能は無効になり、[ゴミ箱]ボタンの代わりに[完全に削除]ボタンが表示されます。 [完全に削除]ボタンをクリックすると、そのアイテムは警告メッセージなしですぐに削除されます。

コーデックス から)

7

特定の投稿タイプでのみ使用するために、ここで他の回答を拡大します。

add_action( 'before_delete_post', 'delete_all_attached_media' );

function delete_all_attached_media( $post_id ) {

  if( get_post_type($post_id) == "post" ) {
    $attachments = get_attached_media( '', $post_id );

    foreach ($attachments as $attachment) {
      wp_delete_attachment( $attachment->ID, 'true' );
    }
  }

}

投稿が完全に削除されると、これによりすべての添付メディアが削除されます。

1
adambware