実装にはfunctions.php
へ下記のように記述します。
functions.php
add_action( 'before_delete_post', 'delete_post_attachment' );
function 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
を任意で変更してください。