スポンサーリンク

WordPressの投稿削除時にアイキャッチ画像も一緒に削除する

Web系

投稿にアイキャッチ画像を指定している状態で、投稿を削除してもアイキャッチ画像は削除されません。つまり、画像だけが残り続けて、いずれサーバーの容量を圧迫することになります。

そこで本記事では、投稿の削除処理をトリガーとしてアイキャッチ画像を削除するカスタマイズコードを記載します。

当然ですがアイキャッチ画像を他の投稿で使いまわしている場合は参照出来なくなるので、アイキャッチ画像は1つの投稿に対してしか使用しないという運用が前提となっています。

また、WordPressが画像ファイルのアップロード時に作成するサムネイルを生成しない設定も行います。それを行わない場合は、サムネイルも探して削除する(面倒な)処理も必要になってきます。

/* ==================== disable auto image creating ==================== */
//WordPress:画像アップロード時の自動生成をすべて停止
function disable_image_sizes( $new_sizes ) {
  unset( $new_sizes['thumbnail'] );
  unset( $new_sizes['medium'] );
  unset( $new_sizes['large'] );
  unset( $new_sizes['medium_large'] );
  unset( $new_sizes['1536x1536'] );
  unset( $new_sizes['2048x2048'] );
  return $new_sizes;
}
add_filter( 'intermediate_image_sizes_advanced', 'disable_image_sizes' );
add_filter( 'big_image_size_threshold', '__return_false' );

/* ==================== delete image when delete post ==================== */
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 ); //第二引数をtrueにすると即削除になる
  }
}
add_action( 'before_delete_post', 'delete_post_attachment' ); //afterの方が良い?