Creare programmaticamente una categoria di prodotto e aggiungere una miniatura in WooCommerce

12 ago 2015, 15:45:01
Visualizzazioni: 19.2K
Voti: 3

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?

2
Commenti

come si utilizza wp_insert_term? ora c'è supporto per un campo thumbnail_id, devi aggiungerlo in un secondo momento con la funzione di woocommerce update_woocommerce_term_meta. guarda in wp-content\plugins\woocommerce\includes\admin\class-wc-admin-taxonomies.php

mmm mmm
12 ago 2015 15:59:55

Grazie, è stato molto utile. Sono riuscito a ottenere l'id del termine e usarlo per aggiornare il meta thumbnail_id. Risponderò alla mia domanda tra un minuto, dandoti il merito.

BBQ. BBQ.
12 ago 2015 17:04:29
Tutte le risposte alla domanda 1
1
10

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 ) );
    }
}
13 ago 2015 10:34:00
Commenti

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

Aurovrata Aurovrata
5 feb 2020 08:26:01