Creare programatică a categoriei de produse și adăugarea imaginii în WooCommerce

12 aug. 2015, 15:45:01
Vizualizări: 19.2K
Voturi: 3

Î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?

2
Comentarii

cum folosești wp_insert_term? nu există suport pentru câmpul thumbnail_id, trebuie să îl adaugi ulterior cu funcția woocommerce update_woocommerce_term_meta. verifică în wp-content\plugins\woocommerce\includes\admin\class-wc-admin-taxonomies.php

mmm mmm
12 aug. 2015 15:59:55

Mulțumesc, asta m-a ajutat foarte mult. Am reușit să obțin id-ul termenului și să îl folosesc pentru a actualiza meta thumbnail_id. Voi răspunde singur la întrebare într-un minut, cu credite pentru tine.

BBQ. BBQ.
12 aug. 2015 17:04:29
Toate răspunsurile la întrebare 1
1
10

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 ) );
    }
}
13 aug. 2015 10:34:00
Comentarii

î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.

Aurovrata Aurovrata
5 feb. 2020 08:26:01