WordPress Content
Create, update, and manage WordPress content โ posts, pages, media, categories, tags, and menus. Produces live content on the site via WP-CLI or the REST API.
Prerequisites
- Working WP-CLI SSH connection or REST API credentials (use wordpress-setup skill)
- Site config from
wordpress.config.json or wp-cli.yml
Workflow
Step 1: Determine the Operation
| Task |
Best Method |
| Create/edit single post or page |
WP-CLI wp post create/update |
| Bulk create posts |
WP-CLI loop or REST API batch |
| Upload images/media |
WP-CLI wp media import |
| Manage categories/tags |
WP-CLI wp term |
| Update navigation menus |
WP-CLI wp menu |
| Scheduled posts |
WP-CLI with --post_date |
| Complex HTML content |
Write to temp file, pass to WP-CLI |
| No SSH access available |
REST API with Application Password |
Step 2: Create Content
Blog Posts
wp @site post create \
--post_type=post \
--post_title="My New Blog Post" \
--post_content="<p>Post content here.</p>" \
--post_status=draft \
--post_category=3,5
wp @site post create ./post-content.html \
--post_type=post \
--post_title="My New Blog Post" \
--post_status=draft \
--post_excerpt="A brief summary of the post." \
--post_category=3,5 \
--tags_input="tag1,tag2"
Post statuses: draft, publish, pending, future (use with --post_date)
Pages
wp @site post create \
--post_type=page \
--post_title="About Us" \
--post_content="<h2>Our Story</h2><p>Content here...</p>" \
--post_status=publish \
--post_parent=0 \
--menu_order=10
Scheduled Posts
wp @site post create \
--post_type=post \
--post_title="Scheduled Post" \
--post_content="<p>This goes live tomorrow.</p>" \
--post_status=future \
--post_date="2026-02-23 09:00:00"
Step 3: Upload Media
wp @site media import "https://example.com/image.jpg" \
--title="Product Photo" \
--alt="Product front view" \
--caption="Our latest product"
scp ./image.jpg user@host:/tmp/image.jpg
wp @site media import /tmp/image.jpg --title="Local Upload"
wp @site media import "https://example.com/hero.jpg" \
--title="Hero" --featured_image --post_id={id}
wp @site post list --post_type=attachment --fields=ID,post_title,guid
wp @site media regenerate --yes
Set featured image on a post:
wp @site post meta update {post_id} _thumbnail_id {attachment_id}
Step 4: Manage Taxonomy
Categories
wp @site term list category --fields=term_id,name,slug,count
wp @site term create category "News" --slug=news --description="Company news and updates"
wp @site term create category "Product News" --slug=product-news --parent=5
wp @site term update category {term_id} --name="Updated Name"
wp @site post term add {post_id} category news
Tags
wp @site term list post_tag --fields=term_id,name,slug,count
wp @site term create post_tag "new-tag"
wp @site post create --post_title="..." --tags_input="seo,marketing,tips"
wp @site post term add {post_id} post_tag seo marketing tips
Step 5: Manage Menus
wp @site menu list --fields=term_id,name,slug,count
wp @site menu item list main-menu --fields=db_id,type,title,link,position
wp @site menu item add-post main-menu {page_id} --title="About Us"
wp @site menu item add-custom main-menu "Contact" "https://example.com/contact/"
wp @site menu item add-term main-menu category {term_id}
wp @site menu item update {item_id} --position=3
wp @site menu item delete {item_id}
Step 6: Update Existing Content
wp @site post update {post_id} \
--post_title="Updated Title" \
--post_content="<p>New content.</p>"
wp @site post update {post_id} ./updated-content.html
wp @site post list --s="search term" --fields=ID,post_title
wp @site post list --post_type=post --post_status=draft --field=ID | \
xargs -I {} wp @site post update {} --post_status=publish
wp @site post delete {post_id}
wp @site post delete {post_id} --force
Step 7: Post Meta and Custom Fields
wp @site post meta list {post_id} --fields=meta_key,meta_value
wp @site post meta get {post_id} meta_key
wp @site post meta update {post_id} meta_key "meta_value"
wp @site post meta add {post_id} meta_key "meta_value"
wp @site post meta delete {post_id} meta_key
ACF stores fields with both the field value and a reference key (_field_name -> field_abc123).
Step 8: Search and Replace
wp @site search-replace "old text" "new text" --dry-run
wp @site search-replace "old text" "new text" --precise
wp @site search-replace "old" "new" wp_posts --precise
wp @site search-replace "old" "new" wp_posts post_content --precise
Step 9: Export and Import
wp @site export --dir=/tmp/
wp @site export --post_type=post --dir=/tmp/
wp @site import /path/to/file.xml --authors=mapping.csv
Step 10: Verify
wp @site post get {post_id} --fields=ID,post_title,post_status,guid
wp @site post get {post_id} --field=guid