Всем привет. Я давно занимаюсь созданием и наполнением магазинов на связке WordPress + Woocommerce, поэтому использование REST API Woocommerce для меня достаточно интересная темя. Множество задач возникает и поступает от заказчиков, а так же множество решений находится в процессе реализации задач. Буду тут делиться своими наработками и отвечать на вопросы, если будут.
И так, давайте разберемся, как создать категорию товара (product category) с родительской категорией в WordPress с помощью REST API WOO.
Для нашего примера сделаем форму для внесения наименований категорий, в вашем случае наименования могут быть получены, например с предыдущей страницы.
1 2 3 4 5 6 7 8 9 10 11 |
<h1>Создание категорий товаров</h1> <form method="post" action="<strong>createCategory.php"</strong>> <label for="parentCategoryName">Наименование родительской категории:</label><br> <input type="text" id="parentCategoryName" name="parentCategoryName" required><br><br> <label for="childCategoryName">Наименование дочерней категории:</label><br> <input type="text" id="childCategoryName" name="childCategoryName" required><br><br> <input type="submit" value="Создать категории"> </form> |
Далее, нам понадобится сам скрипт createCategory.php
, который будет отправлять запросы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<?php // Настройки API $consumer_key = 'your_consumer_key'; // Замените на свой ключ $consumer_secret = 'your_consumer_secret'; // Замените на свой секретный ключ $base_url = 'https://your-site.com/wp-json/wc/v3/products/categories'; // Замените на URL вашего сайта // Функция для отправки запроса к API WooCommerce function send_api_request($url, $data, $consumer_key, $consumer_secret) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode($consumer_key . ':' . $consumer_secret), ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode >= 200 && $httpCode < 300) { return json_decode($response, true); } else { echo "Ошибка HTTP {$httpCode}: {$response}\n"; return false; } } // Получение данных из формы $parentCategoryName = isset($_POST['parentCategoryName']) ? sanitize_text_field($_POST['parentCategoryName']) : ''; $childCategoryName = isset($_POST['childCategoryName']) ? sanitize_text_field($_POST['childCategoryName']) : ''; // Проверка данных if (empty($parentCategoryName) || empty($childCategoryName)) { echo "Пожалуйста, заполните все поля формы."; exit; } // 1. Создание родительской категории $parentCategoryData = array( 'name' => $parentCategoryName, 'slug' => sanitize_title($parentCategoryName), // создаем slug из названия категории ); $parentCategoryResponse = send_api_request($base_url, $parentCategoryData, $consumer_key, $consumer_secret); if ($parentCategoryResponse && isset($parentCategoryResponse['id'])) { $parentId = $parentCategoryResponse['id']; echo "Родительская категория '$parentCategoryName' создана с ID: " . $parentId . "<br>"; // 2. Создание дочерней категории $childCategoryData = array( 'name' => $childCategoryName, 'slug' => sanitize_title($childCategoryName), // создаем slug из названия категории 'parent' => $parentId, ); $childCategoryResponse = send_api_request($base_url, $childCategoryData, $consumer_key, $consumer_secret); if ($childCategoryResponse) { echo "Дочерняя категория '$childCategoryName' успешно создана."; } else { echo "Не удалось создать дочернюю категорию."; } } else { echo "Не удалось создать родительскую категорию."; } ?> |
- Замените placeholders: Замените
your_consumer_key
,your_consumer_secret
, иhttps://your-site.com
на свои значения. sanitize_title()
: Функцияsanitize_title()
используется для создания корректногоslug
из имени категории.- Обработка ошибок: Код содержит базовую обработку ошибок, но в реальном приложении нужно добавить более подробную обработку и логирование.
- Безопасность: Функция
sanitize_text_field()
применяется для очистки данных формы от вредоносного кода, но для максимальной безопасности, следует добавить дополнительную проверку на вводимые данные. - curl: Убедитесь, что у вас установлен и включен модуль
curl
в PHP.
В заключение:
Этот пример демонстрирует, как можно создать категорию товара с родительской категорией через REST API WooCommerce. Вы можете адаптировать его под свои нужды, добавляя другие поля или меняя параметры.