<!-- BusyBot node reference — https://busybot.net/tools/wordpress/ -->

> Node: WordPress (`wordpress`) · Action · v1
> Category: Marketing · Credentials: WordPress API (`wordpressApi`)
> Updated: 2026-08-16

# WordPress

> Manage WordPress posts, pages, and users via the REST API.

## Overview

Connects a workflow to a WordPress site through the WP REST API v2. Create, read, update and delete posts, pages and users, and filter or page through large collections. You control the details WordPress exposes — publication status and date, categories and tags, post formats, sticky posts, comment and pingback settings, page hierarchy and menu order, and theme templates (including Elementor's). Authentication uses an application password, so the node works against any WordPress 5.6 or newer site without an extra plugin.

**Category:** Marketing  
**Tool Name:** `wordpress`  
**Version:** 1

**Appearance:** Icon: `si-wordpress` | Color: `#21759B`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **WordPress API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/wordpress-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Post | `post` |
| Page | `page` |
| User | `user` |

### Operations

The operations available depend on the resource you select.

**Post**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a post |
| Delete | `delete` | Delete a post |
| Get | `get` | Get a post |
| Get Many | `getAll` | Get many posts |
| Update | `update` | Update a post |

**Page**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a page |
| Delete | `delete` | Delete a page |
| Get | `get` | Get a page |
| Get Many | `getAll` | Get many pages |
| Update | `update` | Update a page |

**User**

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a user |
| Delete | `delete` | Delete a user, reassigning their content |
| Get | `get` | Get a user |
| Get Many | `getAll` | Get many users |
| Update | `update` | Update a user |

### Parameters

#### Post: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | The title for the post. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional fields to set on the new post. |
| — Author ID | `string` | No | — | The ID for the author of the post. Find author IDs via the User > Get Many operation. |
| — Categories | `string` | No | — | Comma-separated list of category IDs to assign to the post. Find category IDs in WordPress Admin > Posts > Categories. |
| — Comment Status | `options` | No | `open` | Whether or not comments are open on the post. |
| | | | | Options: `open`, `closed` |
| — Content | `string` | No | — | The content for the post (HTML). |
| — Date | `dateTime` | No | — | The date the post was published, in the site's timezone. |
| — Format | `options` | No | `standard` | The format for the post. |
| | | | | Options: `aside`, `audio`, `chat`, `gallery`, `image`, `link`, `quote`, `standard`, `status`, `video` |
| — Password | `string` | No | — | A password to protect access to the content and excerpt. |
| — Ping Status | `options` | No | `open` | Whether pingbacks/trackbacks are accepted. |
| | | | | Options: `open`, `closed` |
| — Slug | `string` | No | — | An alphanumeric identifier for the post unique to its type. |
| — Status | `options` | No | `draft` | A named status for the post. |
| | | | | Options: `draft`, `future`, `pending`, `private`, `publish` |
| — Sticky | `boolean` | No | `false` | Whether or not the post should be treated as sticky (pinned). |
| — Tags | `string` | No | — | Comma-separated list of tag IDs to assign to the post. Find tag IDs in WordPress Admin > Posts > Tags. |
| — Template | `string` | No | — | The theme template file name. For Elementor sites, use: elementor_canvas, elementor_header_footer, or elementor_theme. |

#### Post: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Post ID | `string` | Yes | — | Unique identifier for the post. Supports expressions. |
| Options | `collection` | No | `{}` | Deletion options. |
| — Force | `boolean` | No | `false` | Whether to bypass trash and force permanent deletion. |

#### Post: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Post ID | `string` | Yes | — | Unique identifier for the post. Supports expressions. |
| Options | `collection` | No | `{}` | Optional settings for the read. |
| — Context | `options` | No | `view` | Scope under which the request is made; determines fields present in response. |
| | | | | Options: `view`, `embed`, `edit` |
| — Password | `string` | No | — | The password for the post if it is password protected. |

#### Post: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `10` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | Filters and sorting for the query. |
| — After | `dateTime` | No | — | Limit response to posts published after a given ISO8601 compliant date. |
| — Author IDs | `string` | No | — | Comma-separated author IDs to limit results to specific authors. |
| — Before | `dateTime` | No | — | Limit response to posts published before a given ISO8601 compliant date. |
| — Categories | `string` | No | — | Comma-separated category IDs to include. |
| — Context | `options` | No | `view` | Scope under which the request is made; determines fields present in response. |
| | | | | Options: `view`, `embed`, `edit` |
| — Exclude Categories | `string` | No | — | Comma-separated category IDs to exclude. |
| — Exclude Tags | `string` | No | — | Comma-separated tag IDs to exclude. |
| — Order | `options` | No | `desc` | Order sort attribute ascending or descending. |
| | | | | Options: `asc`, `desc` |
| — Order By | `options` | No | `id` | Sort collection by object attribute. |
| | | | | Options: `author`, `date`, `id`, `include`, `include_slugs`, `modified`, `parent`, `relevance`, `slug`, `title` |
| — Search | `string` | No | — | Limit results to those matching a string. |
| — Status | `options` | No | `publish` | Limit result set to posts with a specific status. |
| | | | | Options: `draft`, `future`, `pending`, `private`, `publish` |
| — Sticky | `boolean` | No | `false` | Whether to limit the result set to items that are sticky. |
| — Tags | `string` | No | — | Comma-separated tag IDs to include. |

#### Post: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Post ID | `string` | Yes | — | Unique identifier for the post. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Fields to change on the post. Fields you leave out are not sent. |
| — Author ID | `string` | No | — | The ID for the author of the post. |
| — Categories | `string` | No | — | Comma-separated list of category IDs. |
| — Comment Status | `options` | No | `open` | Whether or not comments are open on the post. |
| | | | | Options: `open`, `closed` |
| — Content | `string` | No | — | The content for the post (HTML). |
| — Date | `dateTime` | No | — | The date the post was published, in the site's timezone. |
| — Format | `options` | No | `standard` | The format for the post. |
| | | | | Options: `aside`, `audio`, `chat`, `gallery`, `image`, `link`, `quote`, `standard`, `status`, `video` |
| — Password | `string` | No | — | A password to protect access to the content and excerpt. |
| — Ping Status | `options` | No | `open` | Whether pingbacks/trackbacks are accepted. |
| | | | | Options: `open`, `closed` |
| — Slug | `string` | No | — | An alphanumeric identifier for the post unique to its type. |
| — Status | `options` | No | `draft` | A named status for the post. |
| | | | | Options: `draft`, `future`, `pending`, `private`, `publish` |
| — Sticky | `boolean` | No | `false` | Whether or not the post should be treated as sticky (pinned). |
| — Tags | `string` | No | — | Comma-separated list of tag IDs. |
| — Template | `string` | No | — | The theme template file name. For Elementor: elementor_canvas, elementor_header_footer, or elementor_theme. |
| — Title | `string` | No | — | The title for the post. |

#### Page: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Title | `string` | Yes | — | The title for the page. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional fields to set on the new page. |
| — Author ID | `string` | No | — | The ID for the author of the page. |
| — Comment Status | `options` | No | `open` | Whether or not comments are open on the page. |
| | | | | Options: `open`, `closed` |
| — Content | `string` | No | — | The content for the page (HTML). |
| — Featured Media ID | `number` | No | — | The ID of the featured media for the page. |
| — Menu Order | `number` | No | `0` | The order of the page in relation to other pages. |
| — Parent ID | `number` | No | — | The ID for the parent page. |
| — Password | `string` | No | — | A password to protect access to the content and excerpt. |
| — Ping Status | `options` | No | `open` | Whether pingbacks/trackbacks are accepted. |
| | | | | Options: `open`, `closed` |
| — Slug | `string` | No | — | An alphanumeric identifier for the page unique to its type. |
| — Status | `options` | No | `draft` | A named status for the page. |
| | | | | Options: `draft`, `future`, `pending`, `private`, `publish` |
| — Template | `string` | No | — | The theme template file name. For Elementor: elementor_canvas, elementor_header_footer, or elementor_theme. |

#### Page: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Page ID | `string` | Yes | — | Unique identifier for the page. Supports expressions. |
| Options | `collection` | No | `{}` | Deletion options. |
| — Force | `boolean` | No | `false` | Whether to bypass trash and force permanent deletion. |

#### Page: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Page ID | `string` | Yes | — | Unique identifier for the page. Supports expressions. |
| Options | `collection` | No | `{}` | Optional settings for the read. |
| — Context | `options` | No | `view` | Scope under which the request is made; determines fields present in response. |
| | | | | Options: `view`, `embed`, `edit` |
| — Password | `string` | No | — | The password for the page if it is password protected. |

#### Page: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `10` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | Filters and sorting for the query. |
| — After | `dateTime` | No | — | Limit response to pages published after a given ISO8601 compliant date. |
| — Author IDs | `string` | No | — | Comma-separated author IDs to limit results to specific authors. |
| — Before | `dateTime` | No | — | Limit response to pages published before a given ISO8601 compliant date. |
| — Context | `options` | No | `view` | Scope under which the request is made; determines fields present in response. |
| | | | | Options: `view`, `embed`, `edit` |
| — Menu Order | `number` | No | `0` | Limit result set to items with a specific menu order value. |
| — Order | `options` | No | `desc` | Order sort attribute ascending or descending. |
| | | | | Options: `asc`, `desc` |
| — Order By | `options` | No | `id` | Sort collection by object attribute. |
| | | | | Options: `author`, `date`, `id`, `include`, `include_slugs`, `modified`, `parent`, `relevance`, `slug`, `title` |
| — Page Number | `number` | No | `1` | Current page of the collection (used with limit, not returnAll). |
| — Parent Page ID | `number` | No | — | Limit result set to items with a particular parent page ID. |
| — Search | `string` | No | — | Limit results to those matching a string. |
| — Status | `options` | No | `publish` | Limit result set to pages with a specific status. |
| | | | | Options: `draft`, `future`, `pending`, `private`, `publish` |

#### Page: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Page ID | `string` | Yes | — | Unique identifier for the page. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Fields to change on the page. Fields you leave out are not sent. |
| — Author ID | `string` | No | — | The ID for the author of the page. |
| — Comment Status | `options` | No | `open` | Whether or not comments are open on the page. |
| | | | | Options: `open`, `closed` |
| — Content | `string` | No | — | The content for the page (HTML). |
| — Featured Media ID | `number` | No | — | The ID of the featured media for the page. |
| — Menu Order | `number` | No | `0` | The order of the page in relation to other pages. |
| — Parent ID | `number` | No | — | The ID for the parent page. |
| — Password | `string` | No | — | A password to protect access to the content and excerpt. |
| — Ping Status | `options` | No | `open` | Whether pingbacks/trackbacks are accepted. |
| | | | | Options: `open`, `closed` |
| — Slug | `string` | No | — | An alphanumeric identifier for the page unique to its type. |
| — Status | `options` | No | `draft` | A named status for the page. |
| | | | | Options: `draft`, `future`, `pending`, `private`, `publish` |
| — Template | `string` | No | — | The theme template file name. For Elementor: elementor_canvas, elementor_header_footer, or elementor_theme. |
| — Title | `string` | No | — | The title for the page. |

#### User: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Username | `string` | Yes | — | Login name for the user. Supports expressions. |
| Name | `string` | Yes | — | Display name for the user. Supports expressions. |
| First Name | `string` | Yes | — | First name for the user. Supports expressions. |
| Last Name | `string` | Yes | — | Last name for the user. Supports expressions. |
| Email | `string` | Yes | — | The email address for the user. Supports expressions. |
| Password | `string` | Yes | — | Password for the user. Supports expressions. |
| Additional Fields | `collection` | No | `{}` | Optional profile fields to set on the new user. |
| — Description | `string` | No | — | Description of the user. |
| — Nickname | `string` | No | — | The nickname for the user. |
| — Slug | `string` | No | — | An alphanumeric identifier for the user. |
| — URL | `string` | No | — | URL of the user. |

#### User: Delete

The account to delete is read from the `userId` field on the incoming item; the User ID parameter is not shown for this operation.

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Reassign | `string` | Yes | — | User ID to reassign the deleted user's posts and links to. Deleting a user is permanent — WordPress does not trash user accounts. |

#### User: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | Unique identifier for the user. Supports expressions. |
| Options | `collection` | No | `{}` | Optional settings for the read. |
| — Context | `options` | No | `view` | Scope under which the request is made; determines fields present in response. |
| | | | | Options: `view`, `embed`, `edit` |

#### User: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit | `number` | No | `10` | Max number of results to return. _(shown when Return All is `false`)_ |
| Options | `collection` | No | `{}` | Filters and sorting for the query. |
| — Context | `options` | No | `view` | Scope under which the request is made; determines fields present in response. |
| | | | | Options: `view`, `embed`, `edit` |
| — Order | `options` | No | `desc` | Order sort attribute ascending or descending. |
| | | | | Options: `asc`, `desc` |
| — Order By | `options` | No | `id` | Sort collection by object attribute. |
| | | | | Options: `email`, `id`, `include`, `include_slugs`, `name`, `registered_date`, `slug`, `url` |
| — Search | `string` | No | — | Limit results to those matching a string. |
| — Who | `options` | No | `authors` | Limit result set to users who are considered authors. |
| | | | | Options: `authors` |

#### User: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| User ID | `string` | Yes | — | Unique identifier for the user. Supports expressions. |
| Update Fields | `collection` | No | `{}` | Fields to change on the user. Fields you leave out are not sent. |
| — Description | `string` | No | — | Description of the user. |
| — Email | `string` | No | — | The email address for the user. |
| — First Name | `string` | No | — | First name for the user. |
| — Last Name | `string` | No | — | Last name for the user. |
| — Name | `string` | No | — | Display name for the user. |
| — Nickname | `string` | No | — | The nickname for the user. |
| — Password | `string` | No | — | Password for the user. |
| — Slug | `string` | No | — | An alphanumeric identifier for the user. |
| — URL | `string` | No | — | URL of the user. |
| — Username | `string` | No | — | Login name for the user. |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

The node merges the WordPress response onto the input item JSON — the incoming fields pass through, and anything WordPress returns under the same key replaces them (`id`, `title`, `status` and `date` are the usual collisions). Binary data on the input item is forwarded unchanged.

`Create`, `Get`, `Update` and `Delete` produce one output item per input item. `Get Many` fans out: every post, page or user in the response becomes its own output item, so a single input item can produce hundreds. When a list comes back empty, that input item produces no output items at all.

| Resource / Operation | Output items | Item JSON |
|----------------------|--------------|-----------|
| Post / Page / User: Create | one per input item | Input JSON merged with the record WordPress created |
| Post / Page / User: Get | one per input item | Input JSON merged with the requested record |
| Post / Page / User: Update | one per input item | Input JSON merged with the updated record |
| Post / Page / User: Get Many | one per record returned | Input JSON merged with that record |
| Post / Page: Delete | one per input item | Input JSON merged with the delete response; nothing is merged when WordPress replies with no content |
| User: Delete | one per input item | Input JSON merged with the delete response |

The fields inside each record are whatever the WP REST API returns for that resource, which depends on the Context option — `edit` exposes the most fields, `embed` the fewest. Reference them downstream by expression, for example `{{ $json.id }}`.

## Usage Examples

- Create a new draft blog post on WordPress
- List all published pages from a WordPress site
- Update the title and content of an existing post
- Delete a WordPress page
- Create a new WordPress user account
- Get all WordPress users who are authors

## Example Configuration

Create a draft post from an upstream item, with categories and tags given as numeric IDs:

```json
{
  "type": "wordpress",
  "parameters": {
    "resource": "post",
    "operation": "create",
    "title": "{{ $json.title }}",
    "additionalFields": {
      "content": "{{ $json.html }}",
      "status": "draft",
      "categories": "5,12",
      "tags": "31",
      "commentStatus": "open",
      "format": "standard"
    }
  }
}
```

Publish a post that already exists on the site:

```json
{
  "type": "wordpress",
  "parameters": {
    "resource": "post",
    "operation": "update",
    "postId": "{{ $json.id }}",
    "updateFields": {
      "status": "publish",
      "date": "{{ $datetime.now }}"
    }
  }
}
```

Fetch the twenty most recent published posts that match a search term:

```json
{
  "type": "wordpress",
  "parameters": {
    "resource": "post",
    "operation": "getAll",
    "returnAll": false,
    "limit": 20,
    "options": {
      "status": "publish",
      "orderBy": "date",
      "order": "desc",
      "search": "{{ $json.keyword }}"
    }
  }
}
```

Create a child page that renders with an Elementor template:

```json
{
  "type": "wordpress",
  "parameters": {
    "resource": "page",
    "operation": "create",
    "title": "{{ $json.name }}",
    "additionalFields": {
      "content": "{{ $json.body }}",
      "status": "publish",
      "parent": 10,
      "menuOrder": 1,
      "commentStatus": "closed",
      "template": "elementor_canvas"
    }
  }
}
```

Create a user account from a signup record:

```json
{
  "type": "wordpress",
  "parameters": {
    "resource": "user",
    "operation": "create",
    "username": "{{ $json.username }}",
    "name": "{{ $json.fullName }}",
    "firstName": "{{ $json.firstName }}",
    "lastName": "{{ $json.lastName }}",
    "email": "{{ $json.email }}",
    "password": "{{ $json.tempPassword }}",
    "additionalFields": {
      "nickname": "{{ $json.firstName }}",
      "url": "{{ $json.website }}"
    }
  }
}
```

Delete a page permanently instead of moving it to the trash:

```json
{
  "type": "wordpress",
  "parameters": {
    "resource": "page",
    "operation": "delete",
    "pageId": "{{ $json.pageId }}",
    "options": {
      "force": true
    }
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Manage WordPress posts, pages, and users via the WP REST API v2 with full CRUD support.

### Behavior notes

- **Categories and Tags take numeric IDs.** Pass a comma-separated list of IDs such as `5,12`; category or tag names are rejected. Look the IDs up in WordPress Admin > Posts > Categories or > Tags.
- **Get Many fans out.** Each record returned becomes its own output item, so a node that follows a `getAll` runs once per post, page or user.
- **Return All pages through the whole collection.** Turn it off and set Limit when you only want the newest few — that is much cheaper on a large site.
- **Deleting a post or page moves it to the trash** unless you turn on Force in Options. Deleting a user is always permanent and always requires a Reassign user ID to inherit their content.
- **Post ID, Page ID and User ID accept expressions**, and fall back to the matching field on the incoming item (`postId`, `pageId`, `userId`) when you leave them empty.
- **The site URL must use HTTPS.** The application password travels with every request, so plain HTTP is refused.