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 '
';
foreach ($to_delete as $dup) {
$product_link = admin_url('post.php?post=' . $dup['product_id'] . '&action=edit');
$filter_link = admin_url('admin.php?preview_duplicates=1&product_filter=' . $dup['product_id']);
echo '- ';
echo 'Prodotto ID: ' . $dup['product_id'] . ' ';
echo '(modifica) โ ';
echo 'Duplicato ID:
' . $dup['duplicate_id'] . '
โ ';
echo 'Originale ID: ' . $dup['original_id'] . '
โ ';
echo 'File: ' . esc_html(basename($dup['file'])) . '
';
echo ' ';
}
echo '
';
}