Программное создание категории товаров и добавление миниатюры в WooCommerce
Я пытаюсь создать категории и подкатегории товаров в WordPress. Создание самих категорий не вызывает проблем, но я не могу найти способ добавить изображение для конкретной категории.
В админке (wp-admin
) поле для загрузки изображения требует ID вложения (attachment ID). Я пробовал загружать изображение как вложение, не привязывая его к конкретному посту. Затем создавал категорию и пытался использовать названия полей product_cat_thumbnail_id
и thumbnail_id
внутри функции wp_insert_term()
, передавая им ID вложения. Так же, как это делает админка, только там изображение загружается через JavaScript, а затем сохраняется при создании категории.
Не уверен, делаю ли я что-то неправильно, упускаю что-то очевидное, или это какое-то защищенное поле, которое нельзя заполнить программно (что кажется мне странным).
Есть какие-то идеи?

Вот мой ответ на собственный пост. Надеюсь, это будет полезно и другим!
Для создания категории я использовал массив с данными для каждой категории, необходимый для функции wp_insert_term
.
Затем я прошел циклом по этому массиву и использовал функцию fetch_media
, которая загружает изображение по указанному пути и возвращает ID вложения.
После этого я вызываю функцию wp_insert_term
, которую сохраняю как $cid
, чтобы получить значение term_id
из возвращаемого массива.
С полученным $cid['term_id']
и $thumb_id
из функции fetch_media
я могу использовать функцию update_woocommerce_term_meta
и обновить миниатюру категории загруженным вложением.
Базовая функция fetch_media
, которую я использую, доступна здесь:
http://nlb-creations.com/2012/09/26/how-to-programmatically-import-media-files-to-wordpress/
Я изменил её так, чтобы не требовался post_id, поскольку мои термины (категории) не являются записями.
$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'], // термин
'product_cat', // таксономия
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 ) );
}
}

начиная с WooCommerce v3.6 функция update_woocommerce_term_meta
устарела, вместо неё используйте основную функцию WordPress update_term_meta.
