Программное создание категории товаров и добавление миниатюры в WooCommerce

12 авг. 2015 г., 15:45:01
Просмотры: 19.2K
Голосов: 3

Я пытаюсь создать категории и подкатегории товаров в WordPress. Создание самих категорий не вызывает проблем, но я не могу найти способ добавить изображение для конкретной категории.

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

Не уверен, делаю ли я что-то неправильно, упускаю что-то очевидное, или это какое-то защищенное поле, которое нельзя заполнить программно (что кажется мне странным).

Есть какие-то идеи?

2
Комментарии

как использовать wp_insert_term? сейчас есть поддержка для поля thumbnail_id, но его нужно добавить позже с помощью woocommerce функции update_woocommerce_term_meta. посмотрите в wp-content\plugins\woocommerce\includes\admin\class-wc-admin-taxonomies.php

mmm mmm
12 авг. 2015 г. 15:59:55

Спасибо, это очень помогло. Я смог получить term id и использовать его для обновления thumbnail_id meta. Через минуту отвечу на свой собственный вопрос, с указанием вашего авторства.

BBQ. BBQ.
12 авг. 2015 г. 17:04:29
Все ответы на вопрос 1
1
10

Вот мой ответ на собственный пост. Надеюсь, это будет полезно и другим!

Для создания категории я использовал массив с данными для каждой категории, необходимый для функции 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 ) );
    }
}
13 авг. 2015 г. 10:34:00
Комментарии

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

Aurovrata Aurovrata
5 февр. 2020 г. 08:26:01