#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;
}
Если вы чувствуете, что мой ответ помог вам, вы могли бы принять мой ответ.