Update WordPress Post
wordpress_update_postUpdate an existing WordPress post or page by its ID. Only the fields you pass are changed; edits keep WordPress revisions.
THE RESPONSE DOES NOT CARRY THE PAGE BACK. A write answers with ok, the replaced counts and any charset_warning — the three things that tell you whether the edit landed. The stored content is left out and marked content_omitted: true with content_chars, because a WPBakery home page is 45 KB and returning it made the tool result itself too large to read: the write had succeeded, but the caller saw a size error and could not tell (issue #293). Pass return_content=true if you really need the stored content back and the page is small.
COMMENTS / PINGBACKS: comment_status and ping_status take 'open' or 'closed' and act on THIS post only. WordPress' own Settings > Discussion screen changes the default for NEW posts and leaves existing ones untouched, so closing comments on a published page is only possible here. Needs Opus Growth Connector 0.6.0 or newer on the site.
On a page built with Elementor the content field is not what visitors see, so it is skipped and reported back to you: use wordpress_page_design and wordpress_edit_page_design for those pages. featured_media sets the featured image by media id (get one from wordpress_media); 0 removes it. categories and tags take names and are created if missing, which is how you move a published post out of "Uncategorized". author takes a user id, username or display name and changes the byline; use wordpress_users to find the right one. template, meta and copy_meta_from work as in wordpress_create_post — set the page's theme template, write WPBakery/theme post meta, or copy a working page's layout meta (template + WPBakery CSS) onto this one (Connector 0.9.2+).
On a page built from shortcodes (Avada/Fusion, WPBakery) do NOT rewrite content: pass replace=[{"find": "old text", "with": "new text"}] instead. That changes only the text you name and leaves the shortcode layout untouched. If nothing matches, nothing is written and you are told so. Use wordpress_get_post first to see the exact text to match.
Text copied out of a page often will NOT match literally, because editors leave invisible characters in it — non-breaking spaces, smart quotes, long dashes — that look like ordinary ones. When that happens the reply says so and tells you how many times it WOULD match; send the same call again with match="normalized" and those characters are treated as their plain equivalents. match is also accepted per entry ({"find": ..., "with": ..., "match": "normalized"}) when only one of several replacements needs it; the top-level value applies to every entry that does not carry its own. wordpress_get_post(raw=true) shows the invisible characters spelled out if you want to see them.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| meta | No | ||
| tags | No | ||
| match | No | ||
| title | No | ||
| author | No | ||
| status | No | ||
| content | No | ||
| excerpt | No | ||
| replace | No | ||
| site_url | No | ||
| template | No | ||
| categories | No | ||
| ping_status | No | ||
| comment_status | No | ||
| copy_meta_from | No | ||
| featured_media | No | ||
| return_content | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||