> For the complete documentation index, see [llms.txt](https://whitepaper.aitech.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://whitepaper.aitech.io/agentforge/tools/wordpress.md).

# wordpress

[WordPress](https://wordpress.org/) is the world’s leading open-source content management system, making it easy to publish and manage websites, blogs, and all types of online content. With WordPress, you can create and update posts or pages, organize your content with categories and tags, manage media files, moderate comments, and handle user accounts—allowing you to run everything from personal blogs to complex business sites.

Agent Forge’s integration with WordPress lets your agents automate essential website tasks. You can programmatically create new blog posts with specific titles, content, categories, tags, and featured images. Updating existing posts—such as changing their content, title, or publishing status—is straightforward. You can also publish or save content as drafts, manage static pages, work with media uploads, oversee comments, and assign content to relevant organizational taxonomies.

By connecting WordPress to your automations, Agent Forge empowers your agents to streamline content publishing, editorial workflows, and everyday site management—helping you keep your website fresh, organized, and secure without manual effort.

### Usage Instructions

Integrate with WordPress to create, update, and manage posts, pages, media, comments, categories, tags, and users. Supports WordPress.com sites via OAuth and self-hosted WordPress sites using Application Passwords authentication.

### Tools

#### `wordpress_create_post`

Create a new blog post in WordPress.com

**Input**

| Parameter       | Type   | Required | Description                                                              |
| --------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`        | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `title`         | string | Yes      | Post title                                                               |
| `content`       | string | No       | Post content (HTML or plain text)                                        |
| `status`        | string | No       | Post status: publish, draft, pending, private, or future                 |
| `excerpt`       | string | No       | Post excerpt                                                             |
| `categories`    | string | No       | Comma-separated category IDs                                             |
| `tags`          | string | No       | Comma-separated tag IDs                                                  |
| `featuredMedia` | number | No       | Featured image media ID                                                  |
| `slug`          | string | No       | URL slug for the post                                                    |

**Output**

| Parameter | Type   | Description      |
| --------- | ------ | ---------------- |
| `post`    | object | The created post |

#### `wordpress_update_post`

Update an existing blog post in WordPress.com

**Input**

| Parameter       | Type   | Required | Description                                                              |
| --------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`        | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `postId`        | number | Yes      | The ID of the post to update                                             |
| `title`         | string | No       | Post title                                                               |
| `content`       | string | No       | Post content (HTML or plain text)                                        |
| `status`        | string | No       | Post status: publish, draft, pending, private, or future                 |
| `excerpt`       | string | No       | Post excerpt                                                             |
| `categories`    | string | No       | Comma-separated category IDs                                             |
| `tags`          | string | No       | Comma-separated tag IDs                                                  |
| `featuredMedia` | number | No       | Featured image media ID                                                  |
| `slug`          | string | No       | URL slug for the post                                                    |

**Output**

| Parameter | Type   | Description      |
| --------- | ------ | ---------------- |
| `post`    | object | The updated post |

#### `wordpress_delete_post`

Delete a blog post from WordPress.com

**Input**

| Parameter | Type    | Required | Description                                                              |
| --------- | ------- | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string  | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `postId`  | number  | Yes      | The ID of the post to delete                                             |
| `force`   | boolean | No       | Bypass trash and force delete permanently                                |

**Output**

| Parameter | Type    | Description                  |
| --------- | ------- | ---------------------------- |
| `deleted` | boolean | Whether the post was deleted |
| `post`    | object  | The deleted post             |

#### `wordpress_get_post`

Get a single blog post from WordPress.com by ID

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `postId`  | number | Yes      | The ID of the post to retrieve                                           |

**Output**

| Parameter | Type   | Description        |
| --------- | ------ | ------------------ |
| `post`    | object | The retrieved post |

#### `wordpress_list_posts`

List blog posts from WordPress.com with optional filters

**Input**

| Parameter    | Type   | Required | Description                                                              |
| ------------ | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`     | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage`    | number | No       | Number of posts per page (default: 10, max: 100)                         |
| `page`       | number | No       | Page number for pagination                                               |
| `status`     | string | No       | Post status filter: publish, draft, pending, private                     |
| `author`     | number | No       | Filter by author ID                                                      |
| `categories` | string | No       | Comma-separated category IDs to filter by                                |
| `tags`       | string | No       | Comma-separated tag IDs to filter by                                     |
| `search`     | string | No       | Search term to filter posts                                              |
| `orderBy`    | string | No       | Order by field: date, id, title, slug, modified                          |
| `order`      | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter | Type  | Description   |
| --------- | ----- | ------------- |
| `posts`   | array | List of posts |

#### `wordpress_create_page`

Create a new page in WordPress.com

**Input**

| Parameter       | Type   | Required | Description                                                              |
| --------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`        | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `title`         | string | Yes      | Page title                                                               |
| `content`       | string | No       | Page content (HTML or plain text)                                        |
| `status`        | string | No       | Page status: publish, draft, pending, private                            |
| `excerpt`       | string | No       | Page excerpt                                                             |
| `parent`        | number | No       | Parent page ID for hierarchical pages                                    |
| `menuOrder`     | number | No       | Order in page menu                                                       |
| `featuredMedia` | number | No       | Featured image media ID                                                  |
| `slug`          | string | No       | URL slug for the page                                                    |

**Output**

| Parameter | Type   | Description      |
| --------- | ------ | ---------------- |
| `page`    | object | The created page |

#### `wordpress_update_page`

Update an existing page in WordPress.com

**Input**

| Parameter       | Type   | Required | Description                                                              |
| --------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`        | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `pageId`        | number | Yes      | The ID of the page to update                                             |
| `title`         | string | No       | Page title                                                               |
| `content`       | string | No       | Page content (HTML or plain text)                                        |
| `status`        | string | No       | Page status: publish, draft, pending, private                            |
| `excerpt`       | string | No       | Page excerpt                                                             |
| `parent`        | number | No       | Parent page ID for hierarchical pages                                    |
| `menuOrder`     | number | No       | Order in page menu                                                       |
| `featuredMedia` | number | No       | Featured image media ID                                                  |
| `slug`          | string | No       | URL slug for the page                                                    |

**Output**

| Parameter | Type   | Description      |
| --------- | ------ | ---------------- |
| `page`    | object | The updated page |

#### `wordpress_delete_page`

Delete a page from WordPress.com

**Input**

| Parameter | Type    | Required | Description                                                              |
| --------- | ------- | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string  | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `pageId`  | number  | Yes      | The ID of the page to delete                                             |
| `force`   | boolean | No       | Bypass trash and force delete permanently                                |

**Output**

| Parameter | Type    | Description                  |
| --------- | ------- | ---------------------------- |
| `deleted` | boolean | Whether the page was deleted |
| `page`    | object  | The deleted page             |

#### `wordpress_get_page`

Get a single page from WordPress.com by ID

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `pageId`  | number | Yes      | The ID of the page to retrieve                                           |

**Output**

| Parameter | Type   | Description        |
| --------- | ------ | ------------------ |
| `page`    | object | The retrieved page |

#### `wordpress_list_pages`

List pages from WordPress.com with optional filters

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage` | number | No       | Number of pages per request (default: 10, max: 100)                      |
| `page`    | number | No       | Page number for pagination                                               |
| `status`  | string | No       | Page status filter: publish, draft, pending, private                     |
| `parent`  | number | No       | Filter by parent page ID                                                 |
| `search`  | string | No       | Search term to filter pages                                              |
| `orderBy` | string | No       | Order by field: date, id, title, slug, modified, menu\_order             |
| `order`   | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter | Type  | Description   |
| --------- | ----- | ------------- |
| `pages`   | array | List of pages |

#### `wordpress_upload_media`

Upload a media file (image, video, document) to WordPress.com

**Input**

| Parameter     | Type   | Required | Description                                                              |
| ------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`      | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `file`        | file   | No       | File to upload (UserFile object)                                         |
| `filename`    | string | No       | Optional filename override (e.g., image.jpg)                             |
| `title`       | string | No       | Media title                                                              |
| `caption`     | string | No       | Media caption                                                            |
| `altText`     | string | No       | Alternative text for accessibility                                       |
| `description` | string | No       | Media description                                                        |

**Output**

| Parameter | Type   | Description             |
| --------- | ------ | ----------------------- |
| `media`   | object | The uploaded media item |

#### `wordpress_get_media`

Get a single media item from WordPress.com by ID

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `mediaId` | number | Yes      | The ID of the media item to retrieve                                     |

**Output**

| Parameter | Type   | Description              |
| --------- | ------ | ------------------------ |
| `media`   | object | The retrieved media item |

#### `wordpress_list_media`

List media items from the WordPress.com media library

**Input**

| Parameter   | Type   | Required | Description                                                              |
| ----------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`    | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage`   | number | No       | Number of media items per request (default: 10, max: 100)                |
| `page`      | number | No       | Page number for pagination                                               |
| `search`    | string | No       | Search term to filter media                                              |
| `mediaType` | string | No       | Filter by media type: image, video, audio, application                   |
| `mimeType`  | string | No       | Filter by specific MIME type (e.g., image/jpeg)                          |
| `orderBy`   | string | No       | Order by field: date, id, title, slug                                    |
| `order`     | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter | Type  | Description         |
| --------- | ----- | ------------------- |
| `media`   | array | List of media items |

#### `wordpress_delete_media`

Delete a media item from WordPress.com

**Input**

| Parameter | Type    | Required | Description                                                              |
| --------- | ------- | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string  | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `mediaId` | number  | Yes      | The ID of the media item to delete                                       |
| `force`   | boolean | No       | Force delete (media has no trash, so deletion is permanent)              |

**Output**

| Parameter | Type    | Description                   |
| --------- | ------- | ----------------------------- |
| `deleted` | boolean | Whether the media was deleted |
| `media`   | object  | The deleted media item        |

#### `wordpress_create_comment`

Create a new comment on a WordPress.com post

**Input**

| Parameter     | Type   | Required | Description                                                              |
| ------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`      | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `postId`      | number | Yes      | The ID of the post to comment on                                         |
| `content`     | string | Yes      | Comment content                                                          |
| `parent`      | number | No       | Parent comment ID for replies                                            |
| `authorName`  | string | No       | Comment author display name                                              |
| `authorEmail` | string | No       | Comment author email                                                     |
| `authorUrl`   | string | No       | Comment author URL                                                       |

**Output**

| Parameter | Type   | Description         |
| --------- | ------ | ------------------- |
| `comment` | object | The created comment |

#### `wordpress_list_comments`

List comments from WordPress.com with optional filters

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage` | number | No       | Number of comments per request (default: 10, max: 100)                   |
| `page`    | number | No       | Page number for pagination                                               |
| `postId`  | number | No       | Filter by post ID                                                        |
| `status`  | string | No       | Filter by comment status: approved, hold, spam, trash                    |
| `search`  | string | No       | Search term to filter comments                                           |
| `orderBy` | string | No       | Order by field: date, id, parent                                         |
| `order`   | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter  | Type  | Description      |
| ---------- | ----- | ---------------- |
| `comments` | array | List of comments |

#### `wordpress_update_comment`

Update a comment in WordPress.com (content or status)

**Input**

| Parameter   | Type   | Required | Description                                                              |
| ----------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`    | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `commentId` | number | Yes      | The ID of the comment to update                                          |
| `content`   | string | No       | Updated comment content                                                  |
| `status`    | string | No       | Comment status: approved, hold, spam, trash                              |

**Output**

| Parameter | Type   | Description         |
| --------- | ------ | ------------------- |
| `comment` | object | The updated comment |

#### `wordpress_delete_comment`

Delete a comment from WordPress.com

**Input**

| Parameter   | Type    | Required | Description                                                              |
| ----------- | ------- | -------- | ------------------------------------------------------------------------ |
| `siteId`    | string  | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `commentId` | number  | Yes      | The ID of the comment to delete                                          |
| `force`     | boolean | No       | Bypass trash and force delete permanently                                |

**Output**

| Parameter | Type    | Description                     |
| --------- | ------- | ------------------------------- |
| `deleted` | boolean | Whether the comment was deleted |
| `comment` | object  | The deleted comment             |

#### `wordpress_create_category`

Create a new category in WordPress.com

**Input**

| Parameter     | Type   | Required | Description                                                              |
| ------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`      | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `name`        | string | Yes      | Category name                                                            |
| `description` | string | No       | Category description                                                     |
| `parent`      | number | No       | Parent category ID for hierarchical categories                           |
| `slug`        | string | No       | URL slug for the category                                                |

**Output**

| Parameter  | Type   | Description          |
| ---------- | ------ | -------------------- |
| `category` | object | The created category |

#### `wordpress_list_categories`

List categories from WordPress.com

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage` | number | No       | Number of categories per request (default: 10, max: 100)                 |
| `page`    | number | No       | Page number for pagination                                               |
| `search`  | string | No       | Search term to filter categories                                         |
| `order`   | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter    | Type  | Description        |
| ------------ | ----- | ------------------ |
| `categories` | array | List of categories |

#### `wordpress_create_tag`

Create a new tag in WordPress.com

**Input**

| Parameter     | Type   | Required | Description                                                              |
| ------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`      | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `name`        | string | Yes      | Tag name                                                                 |
| `description` | string | No       | Tag description                                                          |
| `slug`        | string | No       | URL slug for the tag                                                     |

**Output**

| Parameter | Type   | Description     |
| --------- | ------ | --------------- |
| `tag`     | object | The created tag |

#### `wordpress_list_tags`

List tags from WordPress.com

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage` | number | No       | Number of tags per request (default: 10, max: 100)                       |
| `page`    | number | No       | Page number for pagination                                               |
| `search`  | string | No       | Search term to filter tags                                               |
| `order`   | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter | Type  | Description  |
| --------- | ----- | ------------ |
| `tags`    | array | List of tags |

#### `wordpress_get_current_user`

Get information about the currently authenticated WordPress.com user

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |

**Output**

| Parameter | Type   | Description      |
| --------- | ------ | ---------------- |
| `user`    | object | The current user |

#### `wordpress_list_users`

List users from WordPress.com (requires admin privileges)

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `perPage` | number | No       | Number of users per request (default: 10, max: 100)                      |
| `page`    | number | No       | Page number for pagination                                               |
| `search`  | string | No       | Search term to filter users                                              |
| `roles`   | string | No       | Comma-separated role names to filter by                                  |
| `order`   | string | No       | Order direction: asc or desc                                             |

**Output**

| Parameter | Type  | Description   |
| --------- | ----- | ------------- |
| `users`   | array | List of users |

#### `wordpress_get_user`

Get a specific user from WordPress.com by ID

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `userId`  | number | Yes      | The ID of the user to retrieve                                           |

**Output**

| Parameter | Type   | Description        |
| --------- | ------ | ------------------ |
| `user`    | object | The retrieved user |

#### `wordpress_search_content`

Search across all content types in WordPress.com (posts, pages, media)

**Input**

| Parameter | Type   | Required | Description                                                              |
| --------- | ------ | -------- | ------------------------------------------------------------------------ |
| `siteId`  | string | Yes      | WordPress.com site ID or domain (e.g., 12345678 or mysite.wordpress.com) |
| `query`   | string | Yes      | Search query                                                             |
| `perPage` | number | No       | Number of results per request (default: 10, max: 100)                    |
| `page`    | number | No       | Page number for pagination                                               |
| `type`    | string | No       | Filter by content type: post, page, attachment                           |
| `subtype` | string | No       | Filter by post type slug (e.g., post, page)                              |

**Output**

| Parameter | Type  | Description    |
| --------- | ----- | -------------- |
| `results` | array | Search results |

### Notes

* Category: `tools`
* Type: `wordpress`


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://whitepaper.aitech.io/agentforge/tools/wordpress.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
