Creare programmaticamente una categoria di prodotto e aggiungere una miniatura in WooCommerce
Sto cercando di creare categorie (e sottocategorie) di prodotti in un'installazione WordPress. La parte delle (sotto)categorie non è affatto un problema, ma non riesco a trovare un modo per aggiungere l'immagine miniatura alla categoria specifica.
Nell'area wp-admin
, il campo che voglio compilare richiede un ID di allegato, quindi ho provato a caricare l'immagine come allegato, senza collegarla a un post specifico. Ho poi creato la mia categoria e ho provato i nomi dei campi product_cat_thumbnail_id
e thumbnail_id
all'interno della funzione wp_insert_term()
, riempiendoli con l'ID dell'allegato. Esattamente come fa la funzione wp-admin
, tranne che wp-admin
lo compila con JavaScript dopo il caricamento, per poi salvare tutto quando crea la categoria.
Non sono sicuro se lo sto facendo nel modo sbagliato, se mi sfugge qualcosa di ovvio, o se si tratta semplicemente di un campo protetto che non è possibile compilare.. (il che mi sembrerebbe assurdo)
Qualche idea?

Ecco la mia risposta al mio stesso post. Spero che sia utile anche ad altri!
Per creare la categoria, ho utilizzato un array con i dati per ogni categoria necessari per la funzione wp_insert_term
.
Poi ho iterato attraverso quell'array e ho usato una funzione fetch_media
che carica l'immagine trovata nel percorso dell'immagine fornito a quella funzione e restituisce un ID di attachment.
Quindi chiamo la funzione wp_insert_term
, che ho impostato come $cid
, in modo da poter ottenere il valore term_id
dall'array restituito in output.
Con il $cid['term_id']
restituito e il $thumb_id
ottenuto dalla funzione fetch_media
, posso usare la funzione update_woocommerce_term_meta
e aggiornare la mia miniatura con l'attachment caricato.
La funzione base fetch_media
che sto usando può essere trovata qui:
http://nlb-creations.com/2012/09/26/how-to-programmatically-import-media-files-to-wordpress/
L'ho modificata in modo che non fosse richiesto il post_id, perché ovviamente i miei termini (categorie) non sono post.
$cats = array(
array('thumb' => 'images/uploads/cat09.png','name' => 'Cat 9','description' => 'Cat 9 description','slug' => 'cat-9','parent' => 8),
array('thumb' => 'images/uploads/cat10.png','name' => 'Cat 10','description' => 'Cat 10 description','slug' => 'cat-10','parent' => 8),
array('thumb' => 'images/uploads/cat11.png','name' => 'Cat 11','description' => 'Cat 11 description','slug' => 'cat-11','parent' => 8),
);
foreach($cats as $data) {
$thumb_id = fetch_media($data['thumb']);
$cid = wp_insert_term(
$data['name'], // il termine
'product_cat', // la tassonomia
array(
'description'=> $data['description'],
'slug' => $data['slug'],
'parent' => $data['parent']
)
);
if(!is_wp_error($cid)){
$cat_id = isset( $cid['term_id'] ) ? $cid['term_id'] : 0;
update_woocommerce_term_meta( $cat_id, 'thumbnail_id', absint( $thumb_id ) );
}
}

a partire da WooCommerce v3.6 update_woocommerce_term_meta
è deprecato, usa invece la funzione core di WordPress update_term_meta.
