Creare programatică a categoriei de produse și adăugarea imaginii în WooCommerce
Încerc să creez categorii și subcategorii de produse într-o instalație WordPress. Partea cu (sub)categoriile nu este o problemă, dar nu reușesc să găsesc o modalitate de a adăuga imaginea thumbnail la categoria specifică.
În wp-admin
, câmpul pe care vreau să-l completez cere un ID de atașament, așa că am încercat să încarc imaginea ca atașament, fără a o conecta la un anumit articol. Apoi am creat categoria mea și am încercat să folosesc numele de câmpuri product_cat_thumbnail_id
și thumbnail_id
în funcția wp_insert_term()
, completându-le cu ID-ul atașamentului. Exact cum face wp-admin
, doar că wp-admin
completează acest câmp prin JavaScript după încărcare, apoi salvează totul la crearea categoriei.
Nu sunt sigur dacă fac ceva greșit, dacă omit ceva evident sau dacă este vorba de un câmp protejat pe care nu ai voie să-l completezi.. (Ceea ce mi s-ar părea absurd)
Idei?

Iată răspunsul meu la propria postare. Sper că este util și pentru alții!
Pentru a crea categoria, am folosit un array cu datele necesare pentru fiecare categorie, necesare funcției wp_insert_term
.
Am parcurs apoi acest array și am utilizat o funcție fetch_media
care încarcă imaginea găsită în calea specificată și returnează un ID de atașament.
Am apelat funcția wp_insert_term
, pe care am stocat-o în variabila $cid
, astfel încât să pot obține valoarea term_id
din array-ul returnat.
Cu valoarea returnată $cid['term_id']
și $thumb_id
obținut din funcția fetch_media
, pot folosi funcția update_woocommerce_term_meta
pentru a actualiza thumbnail-ul cu atașamentul încărcat.
Funcția de bază fetch_media
pe care o folosesc poate fi găsită aici:
http://nlb-creations.com/2012/09/26/how-to-programmatically-import-media-files-to-wordpress/
Am modificat-o astfel încât să nu fie necesar un post_id, deoarece, evident, termenii mei (categoriile) nu sunt postări.
$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'], // termenul
'product_cat', // taxonomia
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 ) );
}
}

începând cu WooCommerce v3.6, funcția update_woocommerce_term_meta
este învechită, utilizați în schimb funcția de bază WordPress update_term_meta.
