Skip to main content
Glama
posts-service.ts3.77 kB
// WordPress Posts Service import { AxiosInstance } from 'axios'; import { logger } from '../../utils/logger.js'; import { ErrorHandler } from '../../utils/error-handler.js'; export interface PostCreateData { title: string; content: string; status?: 'publish' | 'draft' | 'pending' | 'private' | 'future'; excerpt?: string; author?: number; featured_media?: number; comment_status?: 'open' | 'closed'; ping_status?: 'open' | 'closed'; categories?: number[]; tags?: number[]; meta?: Record<string, any>; format?: string; } export interface PostUpdateData extends Partial<PostCreateData> { id: number; } export interface PostQueryParams { per_page?: number; page?: number; status?: string; search?: string; author?: number; categories?: number[]; tags?: number[]; order?: 'asc' | 'desc'; orderby?: 'date' | 'relevance' | 'id' | 'title' | 'slug'; } export class PostsService { constructor(private client: AxiosInstance) {} async createPost(data: PostCreateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.info('Creating new post', { title: data.title }); const response = await this.client.post('/posts', data); logger.info('Post created successfully', { id: response.data.id }); return response.data; }, 'PostsService.createPost'); } async getPost(id: number, context: 'view' | 'edit' = 'edit'): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.debug(`Fetching post ${id}`); const response = await this.client.get(`/posts/${id}`, { params: { context } }); return response.data; }, 'PostsService.getPost'); } async updatePost(data: PostUpdateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { const { id, ...updateData } = data; logger.info(`Updating post ${id}`); const response = await this.client.post(`/posts/${id}`, updateData); logger.info('Post updated successfully', { id }); return response.data; }, 'PostsService.updatePost'); } async deletePost(id: number, force: boolean = false): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.info(`Deleting post ${id}`, { force }); const response = await this.client.delete(`/posts/${id}`, { params: { force } }); logger.info('Post deleted successfully', { id }); return response.data; }, 'PostsService.deletePost'); } async listPosts(params: PostQueryParams = {}): Promise<any> { return ErrorHandler.wrapAsync(async () => { const defaultParams = { per_page: 10, status: 'any', ...params }; logger.debug('Listing posts', defaultParams); const response = await this.client.get('/posts', { params: defaultParams }); logger.debug(`Found ${response.data.length} posts`); return { posts: response.data, total: response.headers['x-wp-total'], totalPages: response.headers['x-wp-totalpages'] }; }, 'PostsService.listPosts'); } async searchPosts(searchTerm: string, params: Omit<PostQueryParams, 'search'> = {}): Promise<any> { return this.listPosts({ ...params, search: searchTerm }); } async getPostsByAuthor(authorId: number, params: Omit<PostQueryParams, 'author'> = {}): Promise<any> { return this.listPosts({ ...params, author: authorId }); } async getPostsByCategory(categoryId: number, params: Omit<PostQueryParams, 'categories'> = {}): Promise<any> { return this.listPosts({ ...params, categories: [categoryId] }); } async getPostsByTag(tagId: number, params: Omit<PostQueryParams, 'tags'> = {}): Promise<any> { return this.listPosts({ ...params, tags: [tagId] }); } }

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