WordPress:記事の削除と同時に使用されている画像も削除する方法

WordPress:記事の削除と同時に使用されている画像も削除する方法

WordPressで記事を削除した際、その記事で使用されている(紐付いている)画像も同時に削除されるようにする方法です。

実装にはfunctions.phpへ下記のように記述します。

functions.php

add_action( 'before_delete_post', 'nxw_delete_post_attachment' );
function nxw_delete_post_attachment( $post_id ) {
  $args = array(
    'numberposts' => -1,
    'post_parent' => $post_id,
    'post_type' => 'attachment',
    'post_status' => 'any',
    'post_mime_type' => 'image'
  );
  $attachments = get_children( $args );
  foreach( $attachments as $attachment ) {
     wp_delete_attachment( $attachment->ID, true );
  }
}

記述後に記事の完全削除(「ゴミ箱へ移動」ではなく「ゴミ箱」にある「完全に削除する」を実行)をすると、その記事に指定したアイキャッチやコンテンツ内に配置していた画像が削除され、メディア一覧や/wp-content/uploadsからも削除されているのを確認できます。
また、メディア設定で複数のサイズ書き出しをしていて使用しているのはその中の1サイズだったとしても、書き出されたすべてのサイズが削除されます。
ただし、画像を複数の記事で使用していた場合、紐付いている記事をひとつ消すだけでも画像は消えてしまうので注意が必要です。

ここでは削除対象が画像になるのでコードも画像に限定する形にしていますが、その他のメディアを削除対象にしたい場合はpost_mime_typeを任意で変更してください。

Close the search window,
please press close button or esc key.