web-dev-qa-db-fra.com

Créez par programme une catégorie de produit et ajoutez une vignette dans woocommerce

J'essaie de créer des (sous) catégories de produits sur une installation WordPress. La partie (sous) catégories ne pose aucun problème, mais je n'arrive pas à trouver un moyen d'ajouter la vignette à la catégorie spécifique.

Dans wp-admin, le champ que je veux remplir demande un identifiant de pièce jointe. J'ai donc essayé de télécharger l'image en tant que pièce jointe, sans la connecter à un message spécifique. J'ai ensuite créé ma catégorie et essayé les noms de champs product_cat_thumbnail_id et thumbnail_id dans la fonction wp_insert_term(), puis les renseigner avec l'identifiant de la pièce jointe. Tout comme la fonction wp-admin, sauf que wp-admin le remplit avec JavaScript après le téléchargement, puis le sauvegarde tout lors de la création de la catégorie.

Je ne suis pas sûr que je me trompe, qu'il me manque quelque chose d'évident ou qu'il s'agisse simplement d'une sorte de champ protégé que vous n'êtes pas autorisé à remplir .. (Ce qui me semble fou)

Des idées?

2
BBQ.

Voici ma réponse à mon propre post. J'espère que cela est utile pour les autres aussi!

Pour créer la catégorie, j'ai utilisé un tableau avec les données par catégorie nécessaires à la fonction wp_insert_term.

Ensuite, j'ai parcouru ce tableau en boucle et utilisé une fonction fetch_media qui télécharge l'image trouvée dans le chemin d'image donné à cette fonction et renvoie un ID de pièce jointe.

J'appelle ensuite la fonction wp_insert_term, que j'ai définie en tant que $cid, afin que je puisse obtenir la valeur term_id à partir de la sortie du tableau renvoyé.

Avec le $cid['term_id'] renvoyé et le $thumb_id récupérés à partir de la fonction fetch_media, je peux utiliser la fonction update_woocommerce_term_meta et mettre à jour ma vignette avec la pièce jointe téléchargée.

La fonction de base fetch_media que j'utilise peut être trouvée ici:
http://nlb-creations.com/2012/09/26/how-to-programmatically-import-media-files-to-wordpress/

Je l'ai modifié pour que le post_id ne soit plus nécessaire, car mes termes (catégories) ne sont évidemment pas des 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'], // the term 
        'product_cat', // the taxonomy
        array(
            'description'=> $data['description'],
            'slug' => $data['slug'],
            'parent' => $data['parent']
        )
    );

    $cat_id = isset( $cid['term_id'] ) ? $cid['term_id'] : 0;
    update_woocommerce_term_meta( $cid['term_id'], 'thumbnail_id', absint( $thumb_id ) );
}
5
BBQ.