Sometimes while we are tweaking our WooCommerce catalog we need to remove a lot of products at once. The normal WooCommerce behaviour is to keep all product images on WordPres Media Library, either thumbnails or gallery, when a product is removed. So if you are removing products to save hosting space or inodes, bad luck!, you archieve nothing.

But there is a easy solution. Today we publish a small and simple free plugin for that issue: once a product is removed, all its images are removed as well. If you need to remove more images, like for example images from a custom plugin, you could easilly modify it to remove those as well.

The plugin code is somethin like:

class DropwpImageCleaner {

   static $instance = false;

   public static function getInstance() {
      if ( !self::$instance )
         self::$instance = new self;
      return self::$instance;
   }

   private function __construct() {
      add_action('before_delete_post', [$this, 'deleted_post'], 20, 1);
   }

   public function deleted_post($post_id) {
      $post_type = get_post_type( $post_id );
      if ( !in_array( $post_type, ['product', 'product_variation']) ) {
         return;
      }

      $product = wc_get_product( $post_id );
      if (!$product) {
         return;
      }

      $thumb_id = $product->get_image_id();
      $gallery_ids = $product->get_gallery_image_ids();

      if ($thumb_id) {
         $gallery_ids = array_merge( $gallery_ids, [$thumb_id] );
      }

      foreach ( $gallery_ids as $attachment_id ) {
         wp_delete_attachment( $attachment_id, true );
      }
   }
}
$dropwpCleaner = DropwpImageCleaner::getInstance();

If you need to remove more elements, you just need to add them to the $gallery_ids array before remove them all at line 33.

You have the plugin at: Dropwp Image Cleaner

Subscríbete a nuestros Posts.

Subscríbete a nuestros Posts.

Apúntate y te enviaremos todos nuestros posts sobre WooCommerce y WordPress.

You have Successfully Subscribed!