Skip to content
Merged
283 changes: 248 additions & 35 deletions apps/sim/blocks/blocks/wordpress.ts

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions apps/sim/tools/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4123,14 +4123,18 @@ import {
wordpressCreatePageTool,
wordpressCreatePostTool,
wordpressCreateTagTool,
wordpressDeleteCategoryTool,
wordpressDeleteCommentTool,
wordpressDeleteMediaTool,
wordpressDeletePageTool,
wordpressDeletePostTool,
wordpressDeleteTagTool,
wordpressGetCategoryTool,
wordpressGetCurrentUserTool,
wordpressGetMediaTool,
wordpressGetPageTool,
wordpressGetPostTool,
wordpressGetTagTool,
wordpressGetUserTool,
wordpressListCategoriesTool,
wordpressListCommentsTool,
Expand All @@ -4140,9 +4144,11 @@ import {
wordpressListTagsTool,
wordpressListUsersTool,
wordpressSearchContentTool,
wordpressUpdateCategoryTool,
wordpressUpdateCommentTool,
wordpressUpdatePageTool,
wordpressUpdatePostTool,
wordpressUpdateTagTool,
wordpressUploadMediaTool,
} from '@/tools/wordpress'
import {
Expand Down Expand Up @@ -7421,8 +7427,14 @@ export const tools: Record<string, ToolConfig> = {
wordpress_delete_comment: wordpressDeleteCommentTool,
wordpress_create_category: wordpressCreateCategoryTool,
wordpress_list_categories: wordpressListCategoriesTool,
wordpress_get_category: wordpressGetCategoryTool,
wordpress_update_category: wordpressUpdateCategoryTool,
wordpress_delete_category: wordpressDeleteCategoryTool,
wordpress_create_tag: wordpressCreateTagTool,
wordpress_list_tags: wordpressListTagsTool,
wordpress_get_tag: wordpressGetTagTool,
wordpress_update_tag: wordpressUpdateTagTool,
wordpress_delete_tag: wordpressDeleteTagTool,
wordpress_get_current_user: wordpressGetCurrentUserTool,
wordpress_list_users: wordpressListUsersTool,
wordpress_get_user: wordpressGetUserTool,
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/tools/wordpress/create_category.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export const createCategoryTool: ToolConfig<
}

if (params.description) body.description = params.description
if (params.parent) body.parent = params.parent
if (params.parent !== undefined) body.parent = params.parent
if (params.slug) body.slug = params.slug

return body
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/tools/wordpress/create_comment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export const createCommentTool: ToolConfig<
content: params.content,
}

if (params.parent) body.parent = params.parent
if (params.parent !== undefined) body.parent = params.parent
if (params.authorName) body.author_name = params.authorName
if (params.authorEmail) body.author_email = params.authorEmail
if (params.authorUrl) body.author_url = params.authorUrl
Expand Down
6 changes: 3 additions & 3 deletions apps/sim/tools/wordpress/create_page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ export const createPageTool: ToolConfig<WordPressCreatePageParams, WordPressCrea
if (params.status) body.status = params.status
if (params.excerpt) body.excerpt = params.excerpt
if (params.slug) body.slug = params.slug
if (params.parent) body.parent = params.parent
if (params.menuOrder) body.menu_order = params.menuOrder
if (params.featuredMedia) body.featured_media = params.featuredMedia
if (params.parent !== undefined) body.parent = params.parent
if (params.menuOrder !== undefined) body.menu_order = params.menuOrder
if (params.featuredMedia !== undefined) body.featured_media = params.featuredMedia

return body
},
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/tools/wordpress/create_post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export const createPostTool: ToolConfig<WordPressCreatePostParams, WordPressCrea
if (params.status) body.status = params.status
if (params.excerpt) body.excerpt = params.excerpt
if (params.slug) body.slug = params.slug
if (params.featuredMedia) body.featured_media = params.featuredMedia
if (params.featuredMedia !== undefined) body.featured_media = params.featuredMedia

if (params.categories) {
body.categories = params.categories
Expand Down
96 changes: 96 additions & 0 deletions apps/sim/tools/wordpress/delete_category.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import type { ToolConfig } from '@/tools/types'
import {
WORDPRESS_COM_API_BASE,
type WordPressDeleteCategoryParams,
type WordPressDeleteCategoryResponse,
} from '@/tools/wordpress/types'

export const deleteCategoryTool: ToolConfig<
WordPressDeleteCategoryParams,
WordPressDeleteCategoryResponse
> = {
id: 'wordpress_delete_category',
name: 'WordPress Delete Category',
description: 'Delete a category from WordPress.com',
version: '1.0.0',

oauth: {
required: true,
provider: 'wordpress',
requiredScopes: ['global'],
},

params: {
siteId: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description: 'WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com)',
},
categoryId: {
type: 'number',
required: true,
visibility: 'user-or-llm',
description: 'The ID of the category to delete',
},
},

request: {
url: (params) => {
// Terms do not support trashing, so force=true is required to delete.
return `${WORDPRESS_COM_API_BASE}/${params.siteId}/categories/${params.categoryId}?force=true`
},
method: 'DELETE',
headers: (params) => ({
'Content-Type': 'application/json',
Authorization: `Bearer ${params.accessToken}`,
}),
},

transformResponse: async (response: Response) => {
if (!response.ok) {
const error = await response.json().catch(() => ({}))
throw new Error(error.message || `WordPress API error: ${response.status}`)
}

const data = await response.json()

return {
success: true,
output: {
deleted: data.deleted ?? true,
category: {
id: data.id ?? data.previous?.id,
count: data.count ?? data.previous?.count,
description: data.description || data.previous?.description,
link: data.link || data.previous?.link,
name: data.name || data.previous?.name,
slug: data.slug || data.previous?.slug,
taxonomy: data.taxonomy || data.previous?.taxonomy,
parent: data.parent ?? data.previous?.parent,
},
},
}
},

outputs: {
deleted: {
type: 'boolean',
description: 'Whether the category was deleted',
},
category: {
type: 'object',
description: 'The deleted category',
properties: {
id: { type: 'number', description: 'Category ID' },
count: { type: 'number', description: 'Number of posts in this category' },
description: { type: 'string', description: 'Category description' },
link: { type: 'string', description: 'Category archive URL' },
name: { type: 'string', description: 'Category name' },
slug: { type: 'string', description: 'Category slug' },
taxonomy: { type: 'string', description: 'Taxonomy name' },
parent: { type: 'number', description: 'Parent category ID' },
},
},
},
}
10 changes: 5 additions & 5 deletions apps/sim/tools/wordpress/delete_comment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,12 @@ export const deleteCommentTool: ToolConfig<
return {
success: true,
output: {
deleted: data.deleted || true,
deleted: data.deleted ?? true,
comment: {
id: data.id || data.previous?.id,
post: data.post || data.previous?.post,
parent: data.parent || data.previous?.parent,
author: data.author || data.previous?.author,
id: data.id ?? data.previous?.id,
post: data.post ?? data.previous?.post,
parent: data.parent ?? data.previous?.parent,
author: data.author ?? data.previous?.author,
author_name: data.author_name || data.previous?.author_name,
author_email: data.author_email || data.previous?.author_email,
author_url: data.author_url || data.previous?.author_url,
Expand Down
12 changes: 3 additions & 9 deletions apps/sim/tools/wordpress/delete_media.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,11 @@ export const deleteMediaTool: ToolConfig<WordPressDeleteMediaParams, WordPressDe
visibility: 'user-or-llm',
description: 'The ID of the media item to delete',
},
force: {
type: 'boolean',
required: false,
visibility: 'user-only',
description: 'Force delete (media has no trash, so deletion is permanent)',
},
},

request: {
url: (params) => {
// Media deletion requires force=true to actually delete
// Media has no trash — deletion always requires force=true to take effect
return `${WORDPRESS_COM_API_BASE}/${params.siteId}/media/${params.mediaId}?force=true`
},
method: 'DELETE',
Expand All @@ -62,9 +56,9 @@ export const deleteMediaTool: ToolConfig<WordPressDeleteMediaParams, WordPressDe
return {
success: true,
output: {
deleted: data.deleted || true,
deleted: data.deleted ?? true,
media: {
id: data.id || data.previous?.id,
id: data.id ?? data.previous?.id,
date: data.date || data.previous?.date,
slug: data.slug || data.previous?.slug,
type: data.type || data.previous?.type,
Expand Down
12 changes: 6 additions & 6 deletions apps/sim/tools/wordpress/delete_page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ export const deletePageTool: ToolConfig<WordPressDeletePageParams, WordPressDele
return {
success: true,
output: {
deleted: data.deleted || true,
deleted: data.deleted ?? true,
page: {
id: data.id || data.previous?.id,
id: data.id ?? data.previous?.id,
date: data.date || data.previous?.date,
modified: data.modified || data.previous?.modified,
slug: data.slug || data.previous?.slug,
Expand All @@ -73,10 +73,10 @@ export const deletePageTool: ToolConfig<WordPressDeletePageParams, WordPressDele
title: data.title || data.previous?.title,
content: data.content || data.previous?.content,
excerpt: data.excerpt || data.previous?.excerpt,
author: data.author || data.previous?.author,
featured_media: data.featured_media || data.previous?.featured_media,
parent: data.parent || data.previous?.parent,
menu_order: data.menu_order || data.previous?.menu_order,
author: data.author ?? data.previous?.author,
featured_media: data.featured_media ?? data.previous?.featured_media,
parent: data.parent ?? data.previous?.parent,
menu_order: data.menu_order ?? data.previous?.menu_order,
},
},
}
Expand Down
8 changes: 4 additions & 4 deletions apps/sim/tools/wordpress/delete_post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ export const deletePostTool: ToolConfig<WordPressDeletePostParams, WordPressDele
return {
success: true,
output: {
deleted: data.deleted || true,
deleted: data.deleted ?? true,
post: {
id: data.id || data.previous?.id,
id: data.id ?? data.previous?.id,
date: data.date || data.previous?.date,
modified: data.modified || data.previous?.modified,
slug: data.slug || data.previous?.slug,
Expand All @@ -73,8 +73,8 @@ export const deletePostTool: ToolConfig<WordPressDeletePostParams, WordPressDele
title: data.title || data.previous?.title,
content: data.content || data.previous?.content,
excerpt: data.excerpt || data.previous?.excerpt,
author: data.author || data.previous?.author,
featured_media: data.featured_media || data.previous?.featured_media,
author: data.author ?? data.previous?.author,
featured_media: data.featured_media ?? data.previous?.featured_media,
categories: data.categories || data.previous?.categories || [],
tags: data.tags || data.previous?.tags || [],
},
Expand Down
91 changes: 91 additions & 0 deletions apps/sim/tools/wordpress/delete_tag.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import type { ToolConfig } from '@/tools/types'
import {
WORDPRESS_COM_API_BASE,
type WordPressDeleteTagParams,
type WordPressDeleteTagResponse,
} from '@/tools/wordpress/types'

export const deleteTagTool: ToolConfig<WordPressDeleteTagParams, WordPressDeleteTagResponse> = {
id: 'wordpress_delete_tag',
name: 'WordPress Delete Tag',
description: 'Delete a tag from WordPress.com',
version: '1.0.0',

oauth: {
required: true,
provider: 'wordpress',
requiredScopes: ['global'],
},

params: {
siteId: {
type: 'string',
required: true,
visibility: 'user-or-llm',
description: 'WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com)',
},
tagId: {
type: 'number',
required: true,
visibility: 'user-or-llm',
description: 'The ID of the tag to delete',
},
},

request: {
url: (params) => {
// Terms do not support trashing, so force=true is required to delete.
return `${WORDPRESS_COM_API_BASE}/${params.siteId}/tags/${params.tagId}?force=true`
},
method: 'DELETE',
headers: (params) => ({
'Content-Type': 'application/json',
Authorization: `Bearer ${params.accessToken}`,
}),
},

transformResponse: async (response: Response) => {
if (!response.ok) {
const error = await response.json().catch(() => ({}))
throw new Error(error.message || `WordPress API error: ${response.status}`)
}

const data = await response.json()

return {
success: true,
output: {
deleted: data.deleted ?? true,
tag: {
id: data.id ?? data.previous?.id,
count: data.count ?? data.previous?.count,
description: data.description || data.previous?.description,
link: data.link || data.previous?.link,
name: data.name || data.previous?.name,
slug: data.slug || data.previous?.slug,
taxonomy: data.taxonomy || data.previous?.taxonomy,
},
},
}
},

outputs: {
deleted: {
type: 'boolean',
description: 'Whether the tag was deleted',
},
tag: {
type: 'object',
description: 'The deleted tag',
properties: {
id: { type: 'number', description: 'Tag ID' },
count: { type: 'number', description: 'Number of posts with this tag' },
description: { type: 'string', description: 'Tag description' },
link: { type: 'string', description: 'Tag archive URL' },
name: { type: 'string', description: 'Tag name' },
slug: { type: 'string', description: 'Tag slug' },
taxonomy: { type: 'string', description: 'Taxonomy name' },
},
},
},
}
Loading
Loading