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 Step 2: Create Content Blog Posts
Simple post
wp @site post create \ --post_type = post \ --post_title = "My New Blog Post" \ --post_content = "
Post content here.
" \ --post_status = draft \ --post_category = 3,5Post from HTML file (better for long content)
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 = "
Our Story
Content here...
" \ --post_status = publish \ --post_parent = 0 \ --menu_order = 10 Scheduled Posts wp @site post create \ --post_type = post \ --post_title = "Scheduled Post" \ --post_content = "This goes live tomorrow.
" \ --post_status = future \ --post_date = "2026-02-23 09:00:00" Step 3: Upload MediaUpload from URL
wp @site media import "https://example.com/image.jpg" \ --title = "Product Photo" \ --alt = "Product front view" \ --caption = "Our latest product"
Upload from local file (requires SCP first for remote sites)
scp ./image.jpg user@host:/tmp/image.jpg wp @site media import /tmp/image.jpg --title = "Local Upload" Set featured image on a post :
Get the attachment ID from the import output, then:
wp @site post meta update { post_id } _thumbnail_id { attachment_id } Step 4: Manage Taxonomy Categories
List categories
wp @site term list category --fields = term_id,name,slug,count
Create category
wp @site term create category "News" --slug = news --description = "Company news and updates"
Create child category
wp @site term create category "Product News" --slug = product-news --parent = 5
Assign category to post
wp @site post term add { post_id } category news Tags
Add tags during post creation
wp @site post create --post_title = "..." --tags_input = "seo,marketing,tips"
Add tags to existing post
wp @site post term add { post_id } post_tag seo marketing tips Step 5: Manage Menus
List menus
wp @site menu list --fields = term_id,name,slug,count
List items in a menu
wp @site menu item list main-menu --fields = db_id,type,title,link
Add page to menu
wp @site menu item add-post main-menu { page_id } --title = "About Us"
Add custom link
wp @site menu item add-custom main-menu "Contact" "https://example.com/contact/"
Reorder (set position)
wp @site menu item update { item_id } --position = 3 Step 6: Update Existing Content
Update post title and content
wp @site post update { post_id } \ --post_title = "Updated Title" \ --post_content = "
New content.
"Update from file
wp @site post update { post_id } ./updated-content.html
Bulk update status
wp @site post list --post_type = post --post_status = draft --field = ID | \ xargs -I { } wp @site post update { } --post_status = publish Step 7: Verify
Check the post
wp @site post get { post_id } --fields = ID,post_title,post_status,guid
Get the live URL
wp @site post get { post_id } --field = guid
List recent posts
wp @site post list --post_type = post --posts_per_page = 5 --fields = ID,post_title,post_status,post_date Provide the admin URL and live URL: Admin: https://example.com/wp-admin/post.php?post={id}&action=edit Live: https://example.com/{slug}/ Critical Patterns HTML Content in WP-CLI For anything beyond a sentence, write HTML to a temp file and pass it: cat
/tmp/post-content.html << 'EOF'
Section Heading
Paragraph content with bold and links.
- List item one
- List item two
EOF wp @site post create /tmp/post-content.html --post_title = "My Post" --post_status = draft Shell quoting in --post_content is fragile for complex HTML. Bulk Operations For creating many posts, use a loop with verification: while IFS = , read -r title slug content_file category ; do wp @site post create " $content_file " \ --post_type = post \ --post_title = " $title " \ --post_name = " $slug " \ --post_category = " $category " \ --post_status = draft sleep 0.5 done < posts.csv Always create as draft first, review, then bulk-publish. ACF Custom Fields If Advanced Custom Fields is installed:
Set ACF field
wp @site post meta update { post_id } field_name "value"
Get ACF field
wp @site post meta get { post_id } field_name ACF stores fields with both the field value and a reference key ( _field_name → field_abc123 ). REST API Alternative When WP-CLI isn't available, use the REST API. See references/rest-api-endpoints.md for patterns. Reference Files references/rest-api-endpoints.md — REST API endpoints with authentication examples references/wp-cli-content.md — WP-CLI content management command reference