Добавьте родительские и дочерние категории из json в woocommerce через rest api

#php #json #rest #woocommerce

Вопрос:

пожалуйста, помогите мне решить следующую проблему: от стороннего поставщика я получаю файл JSON следующего формата:

 [{   
                "SKU": "427515"
                "name": "Frame",
                "description": "18*23",
                "barcode": "6907000061885",
                "price": 356, 
                "category": "Frame",
                "full_category": "souvenirs and gifts"
                "box_length": 23,
                "box_width": 19,
                "box_height": 2, 
}]
 

где — full_category-родительская категория, а категория — дочерняя категория.
Затем я импортирую этот JSON через PHP-скрипт в woocommerce, проблема в том, что я не понимаю, как я могу добавить подкатегорию для родителя без идентификаторов категорий?
бывший администратор магазина оставил мне следующий сценарий:

 function createProducts()
{
    $woocommerce = getWoocommerceConfig();
    $products = getJsonFromFile();

    $imgCounter = 0;
    foreach ($products as $product) {
        /*Chec sku before create the product */
        $productExist = checkProductBySku($product['sku']);       
        $categories = $product['categorias'];        
        $categoriesIds = array();     
        
        foreach ($categories as $category) {
            $categoriesIds[] = ['id' => getCategoryIdByName($category)];
        }
        $finalProduct = [
            'categories' => $categoriesIds,
        ];
       
    }
}
function createCategories()
{
    $categoryValues = getCategories();
    $woocommerce = getWoocommerceConfig();
    
    foreach ($categoryValues as $value) {
        if (!checkCategoryByname($value)) {
            $data = [
                'name' => $value
            ];
            $woocommerce->post('products/categories', $data);
        }
    }
}
function checkCategoryByName($categoryName)
{
    $woocommerce = getWoocommerceConfig();
    $categories = $woocommerce->get('products/categories');
    foreach ($categories as $category) {
        if ($category['name'] === $categoryName) {
            return true;
        }
    }
    return false;
}
function getCategories()
{
    $products = getJsonFromFile();
    $categories = array_column($products, 'categorias');

    foreach ($categories as $categoryItems) {
        foreach ($categoryItems as $categoryValue) {
            $categoryPlainValues[] = $categoryValue;
        }
    }
    $categoryList = array_unique($categoryPlainValues);
    return $categoryList;
}
function getCategoryIdByName($categoryName)
{
    $woocommerce = getWoocommerceConfig();
    $categories = $woocommerce->get('products/categories');
    foreach ($categories as $category) {
        if ($category['name'] == $categoryName) {
            return $category['id'];
        }
    }
}
 

Я не очень хорошо разбираюсь в PHP, может ли кто-нибудь сказать мне, как я могу изменить это, чтобы получить родительские и дочерние категории из json выше.

Ответ №1:

Вам понадобится идентификатор категории, но если вы знаете имя или название, вы можете легко получить его с помощью get_term_by. Это возвращает объект WP_Term, содержащий идентификатор.

Это даст вам идентификатор категории для категории с именем «новости».:

 $categoryId = get_term_by('name', 'news', 'category')->term_id;
 

В вашем сценарии, предполагая, что ваша переменная $category является именем категории, измените этот бит:

 foreach ($categories as $category) {
    $categoriesIds[] = ['id' => get_term_by('name', 'news', 'category')->term_id];
}
 

Для

 foreach ($categories as $category) {
    $categoriesIds[] = ['id' => get_term_by('name', $category, 'category')->term_id;
}
 

Если вы чувствуете, что мой ответ помог вам, вы могли бы принять мой ответ.