Cancella dalla libreria le immagini dei prodotti eliminati

Se possiedi un e-commerce, è probabile che ti sia capitato di dover cercare manualmente, tra centinaia o migliaia di immagini nella libreria, quelle relative a un prodotto eliminato al fine di liberare spazio sul tuo sito. Con questo codice, una volta che eliminerai un prodotto dal tuo negozio online, tutte le immagini collegate verranno automaticamente rimosse, permettendoti di risparmiare tantissimo tempo e spazio sul server.

PHP
/*
* Snippet Name:     Cancella le immagini dei prodotti eliminati dalla libreria
* Snippet Author:   Matteo De Maria
* Version:          1.0.0
*/

add_action( 'before_delete_post', 'delete_product_images', 10, 1 );

function delete_product_images( $post_id ) {
	    // Controlla se l'utente ha l'autorizzazione di cancellare i prodotti
		if ( !current_user_can( 'delete_products' ) ) {
			return;
		}
    $product = wc_get_product( $post_id );

    if ( !$product ) {
        return;
    }

    $featured_image_id = $product->get_image_id();
    $image_galleries_id = $product->get_gallery_image_ids();

    if( !empty( $featured_image_id ) ) {
        $is_featured_image_used = is_image_used( $featured_image_id, $post_id );
        if ( !$is_featured_image_used ) {
            wp_delete_attachment( $featured_image_id, true );
        }
    }

    if( !empty( $image_galleries_id ) ) {
        foreach( $image_galleries_id as $single_image_id ) {
            $is_image_used = is_image_used( $single_image_id, $post_id );
            if ( !$is_image_used ) {
                wp_delete_attachment( $single_image_id, true );
            }
        }
    }
}

function is_image_used( $image_id, $current_product_id ) {
    $query = new WP_Query( array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key' => '_thumbnail_id',
                'value' => $image_id,
                'compare' => '='
            ),
            array(
                'key' => '_product_image_gallery',
                'value' => '"'.$image_id.'"',
                'compare' => 'LIKE'
            )
        ),
        'post__not_in' => array( $current_product_id ),
        'fields' => 'ids',
        'posts_per_page' => -1
    ) );

    return ( $query->have_posts() );
}

Copia il codice nel file functions.php del tuo tema child attivo o utilizza il plugin Code Snippets

Lascia un commento

I commenti non pertinenti allo snippet o offensivi non verranno approvati.

Se desideri condividere del codice, per favore fallo in questo modo: [php]il tuo codice[/php].

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

DMM WEB DESIGN
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.