feat: Add backend API endpoints for taxonomy CRUD operations

Problem: Frontend taxonomy pages (Categories, Tags, Attributes) were getting 404 errors
when trying to create/update/delete because the backend endpoints didn't exist.

Solution: Added complete CRUD API endpoints to ProductsController

Routes Added:
1. Categories:
   - POST   /products/categories (create)
   - PUT    /products/categories/{id} (update)
   - DELETE /products/categories/{id} (delete)

2. Tags:
   - POST   /products/tags (create)
   - PUT    /products/tags/{id} (update)
   - DELETE /products/tags/{id} (delete)

3. Attributes:
   - POST   /products/attributes (create)
   - PUT    /products/attributes/{id} (update)
   - DELETE /products/attributes/{id} (delete)

Implementation:
- All endpoints use admin permission check
- Proper sanitization of inputs
- WordPress taxonomy functions (wp_insert_term, wp_update_term, wp_delete_term)
- WooCommerce attribute functions (wc_create_attribute, wc_update_attribute, wc_delete_attribute)
- Error handling with WP_Error checks
- Consistent response format with success/data/message

Methods Added:
- create_category() / update_category() / delete_category()
- create_tag() / update_tag() / delete_tag()
- create_attribute() / update_attribute() / delete_attribute()

Files Modified:
- includes/Api/ProductsController.php (added 9 CRUD methods + route registrations)

Result:
 Categories can now be created/edited/deleted from admin SPA
 Tags can now be created/edited/deleted from admin SPA
 Attributes can now be created/edited/deleted from admin SPA
 No more 404 errors on taxonomy operations
This commit is contained in:
Dwindi Ramadhana
2025-12-27 00:16:15 +07:00
parent 10acb58f6e
commit 8f61e39272

View File

@@ -123,6 +123,69 @@ class ProductsController {
'callback' => [__CLASS__, 'get_attributes'], 'callback' => [__CLASS__, 'get_attributes'],
'permission_callback' => [Permissions::class, 'check_admin_permission'], 'permission_callback' => [Permissions::class, 'check_admin_permission'],
]); ]);
// Create category
register_rest_route('woonoow/v1', '/products/categories', [
'methods' => 'POST',
'callback' => [__CLASS__, 'create_category'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Update category
register_rest_route('woonoow/v1', '/products/categories/(?P<id>\d+)', [
'methods' => 'PUT',
'callback' => [__CLASS__, 'update_category'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Delete category
register_rest_route('woonoow/v1', '/products/categories/(?P<id>\d+)', [
'methods' => 'DELETE',
'callback' => [__CLASS__, 'delete_category'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Create tag
register_rest_route('woonoow/v1', '/products/tags', [
'methods' => 'POST',
'callback' => [__CLASS__, 'create_tag'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Update tag
register_rest_route('woonoow/v1', '/products/tags/(?P<id>\d+)', [
'methods' => 'PUT',
'callback' => [__CLASS__, 'update_tag'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Delete tag
register_rest_route('woonoow/v1', '/products/tags/(?P<id>\d+)', [
'methods' => 'DELETE',
'callback' => [__CLASS__, 'delete_tag'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Create attribute
register_rest_route('woonoow/v1', '/products/attributes', [
'methods' => 'POST',
'callback' => [__CLASS__, 'create_attribute'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Update attribute
register_rest_route('woonoow/v1', '/products/attributes/(?P<id>\d+)', [
'methods' => 'PUT',
'callback' => [__CLASS__, 'update_attribute'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
// Delete attribute
register_rest_route('woonoow/v1', '/products/attributes/(?P<id>\d+)', [
'methods' => 'DELETE',
'callback' => [__CLASS__, 'delete_attribute'],
'permission_callback' => [Permissions::class, 'check_admin_permission'],
]);
} }
/** /**