Skip to main content
Glama
taxonomy-service.ts4.49 kB
// WordPress Taxonomy Service (Categories, Tags, Custom Taxonomies) import { AxiosInstance } from 'axios'; import { logger } from '../../utils/logger.js'; import { ErrorHandler } from '../../utils/error-handler.js'; export interface TaxonomyTermCreateData { name: string; description?: string; slug?: string; parent?: number; meta?: Record<string, any>; } export interface TaxonomyTermUpdateData extends Partial<TaxonomyTermCreateData> { id: number; } export interface TaxonomyQueryParams { per_page?: number; page?: number; search?: string; parent?: number; post?: number; hide_empty?: boolean; orderby?: 'id' | 'name' | 'slug' | 'count'; order?: 'asc' | 'desc'; } export class TaxonomyService { constructor(private client: AxiosInstance) {} // Categories async createCategory(data: TaxonomyTermCreateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.info('Creating category', { name: data.name }); const response = await this.client.post('/categories', data); logger.info('Category created', { id: response.data.id }); return response.data; }, 'TaxonomyService.createCategory'); } async getCategory(id: number): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.get(`/categories/${id}`); return response.data; }, 'TaxonomyService.getCategory'); } async updateCategory(data: TaxonomyTermUpdateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { const { id, ...updateData } = data; const response = await this.client.post(`/categories/${id}`, updateData); return response.data; }, 'TaxonomyService.updateCategory'); } async deleteCategory(id: number, force: boolean = false): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.delete(`/categories/${id}`, { params: { force } }); return response.data; }, 'TaxonomyService.deleteCategory'); } async listCategories(params: TaxonomyQueryParams = {}): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.get('/categories', { params }); return { categories: response.data, total: response.headers['x-wp-total'], totalPages: response.headers['x-wp-totalpages'] }; }, 'TaxonomyService.listCategories'); } // Tags async createTag(data: TaxonomyTermCreateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.info('Creating tag', { name: data.name }); const response = await this.client.post('/tags', data); logger.info('Tag created', { id: response.data.id }); return response.data; }, 'TaxonomyService.createTag'); } async getTag(id: number): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.get(`/tags/${id}`); return response.data; }, 'TaxonomyService.getTag'); } async updateTag(data: TaxonomyTermUpdateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { const { id, ...updateData } = data; const response = await this.client.post(`/tags/${id}`, updateData); return response.data; }, 'TaxonomyService.updateTag'); } async deleteTag(id: number, force: boolean = false): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.delete(`/tags/${id}`, { params: { force } }); return response.data; }, 'TaxonomyService.deleteTag'); } async listTags(params: TaxonomyQueryParams = {}): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.get('/tags', { params }); return { tags: response.data, total: response.headers['x-wp-total'], totalPages: response.headers['x-wp-totalpages'] }; }, 'TaxonomyService.listTags'); } // Generic Taxonomy Operations async getTaxonomy(slug: string): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.get(`/taxonomies/${slug}`); return response.data; }, 'TaxonomyService.getTaxonomy'); } async listTaxonomies(): Promise<any> { return ErrorHandler.wrapAsync(async () => { const response = await this.client.get('/taxonomies'); return response.data; }, 'TaxonomyService.listTaxonomies'); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mbrown1837/Ultimate-Elementor-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server