Crear categorías de productos y añadir miniaturas programáticamente en WooCommerce

12 ago 2015, 15:45:01
Vistas: 19.2K
Votos: 3

Estoy intentando crear categorías y subcategorías de productos en una instalación de WordPress. La parte de las (sub)categorías no es problema, pero no logro encontrar la forma de añadir la imagen miniatura a la categoría específica.

En el wp-admin, el campo que quiero llenar solicita un ID de adjunto, así que intenté subir la imagen como adjunto, sin conectarla a un post específico. Luego creé mi categoría e intenté usar los nombres de campo product_cat_thumbnail_id y thumbnail_id dentro de la función wp_insert_term(), llenándolos con el ID del adjunto. Igual como lo hace la función de wp-admin, excepto que wp-admin lo llena con JavaScript después de subirla, luego guarda todo al crear la categoría.

No estoy seguro si lo estoy haciendo mal, me estoy perdiendo algo obvio, o si es simplemente algún tipo de campo protegido que no puedes llenar... (Lo cual me parece una locura)

¿Alguna idea?

2
Comentarios

¿cómo se usa wp_insert_term? ahora hay soporte para un campo thumbnail_id, tienes que agregarlo en un segundo paso con la función de woocommerce update_woocommerce_term_meta. revisa en wp-content\plugins\woocommerce\includes\admin\class-wc-admin-taxonomies.php

mmm mmm
12 ago 2015 15:59:55

Gracias, eso ayudó mucho. Pude obtener el term id y usarlo para actualizar el meta thumbnail_id. Responderé mi propia pregunta en un minuto, dándote crédito a ti.

BBQ. BBQ.
12 ago 2015 17:04:29
Todas las respuestas a la pregunta 1
1
10

Aquí está mi respuesta a mi propia publicación. ¡Espero que esto también sea útil para otros!

Para crear la categoría, utilicé un array con los datos por categoría necesarios para la función wp_insert_term.

Luego iteré a través de ese array y usé una función fetch_media que sube la imagen encontrada en la ruta de imagen proporcionada a esa función, y devuelve un ID de adjunto.

Después llamo a la función wp_insert_term, que asigno como $cid, para poder obtener el valor term_id del array devuelto como resultado.

Con el $cid['term_id'] devuelto y el $thumb_id obtenido de la función fetch_media, puedo usar la función update_woocommerce_term_meta y actualizar mi miniatura con el adjunto subido.

La función básica fetch_media que estoy usando se puede encontrar aquí:
http://nlb-creations.com/2012/09/26/how-to-programmatically-import-media-files-to-wordpress/

La modifiqué para que no se requiriera el post_id, porque obviamente, mis términos (categorías) no son posts.

$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'], // el término 
        'product_cat', // la taxonomía
        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
Comentarios

desde WooCommerce v3.6 update_woocommerce_term_meta está obsoleto, utiliza la función principal de WordPress update_term_meta en su lugar.

Aurovrata Aurovrata
5 feb 2020 08:26:01