function woo_media_deduplicator_main() { if (!current_user_can('manage_options') || !isset($_GET['preview_duplicates'])) { return; } if (!class_exists('WooCommerce')) { echo '

WooCommerce non รจ attivo.

'; return; } $filter_id = isset($_GET['product_filter']) ? intval($_GET['product_filter']) : null; $delete_mode = isset($_GET['delete_duplicates']) && $filter_id; $products = wc_get_products(['limit' => -1, 'status' => 'publish']); $hash_map = []; $to_delete = []; foreach ($products as $product) { $product_id = $product->get_id(); if ($filter_id && $product_id !== $filter_id) continue; $thumbnail_id = get_post_thumbnail_id($product_id); $gallery_ids = $product->get_gallery_image_ids(); foreach ($gallery_ids as $attachment_id) { $file_path = get_attached_file($attachment_id); if (!$file_path || !file_exists($file_path)) continue; $hash = md5_file($file_path); if (!isset($hash_map[$hash])) { $hash_map[$hash] = [ 'attachment_id' => $attachment_id, 'product_id' => $product_id, 'file' => $file_path, ]; } else { if ( $attachment_id == $thumbnail_id || $attachment_id == $hash_map[$hash]['attachment_id'] ) { continue; } $to_delete[] = [ 'product_id' => $product_id, 'duplicate_id' => $attachment_id, 'original_id' => $hash_map[$hash]['attachment_id'], 'file' => $file_path, ]; } } } // Esegui cancellazione duplicati + pulizia gallery if ($delete_mode) { $deleted = 0; foreach ($to_delete as $dup) { wp_delete_attachment($dup['duplicate_id'], true); $deleted++; } // Pulizia della gallery del prodotto (ID validi, no img in evidenza) $product = wc_get_product($filter_id); $thumbnail_id = get_post_thumbnail_id($filter_id); $gallery_ids = $product->get_gallery_image_ids(); $valid_ids = []; foreach ($gallery_ids as $aid) { if ($aid != $thumbnail_id && get_post($aid)) { $valid_ids[] = $aid; } } update_post_meta($filter_id, '_product_image_gallery', implode(',', $valid_ids)); echo '

โœ… Eliminati ' . $deleted . ' media duplicati per il prodotto ID ' . $filter_id . '. Gallery aggiornata e immagine in evidenza rimossa dalla gallery.

'; return; } // Preview echo '

Rilevate ' . count($to_delete) . ' immagini duplicate' . ($filter_id ? ' per il prodotto ID ' . $filter_id : '') . ' (nessuna cancellata):

'; if ($filter_id) { $back_link = admin_url('admin.php?preview_duplicates=1'); $delete_link = admin_url('admin.php?preview_duplicates=1&product_filter=' . $filter_id . '&delete_duplicates=1'); echo '

← Torna a tutti i risultati

'; if (count($to_delete)) { echo '

๐Ÿ—‘ Elimina le immagini duplicate per questo prodotto

'; } } echo '
'; }