Wordpress Content

by jezweb64965d9d9fc7No license1K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 3 days ago

Create and manage WordPress posts, pages, media, categories, tags, and menus via WP-CLI or the REST API. Use whenever the user wants to publish a blog post on WordPress, update a page, upload media, manage categories or tags, update navigation menus, schedule posts, or do bulk content operations on a WordPress site.

Instructions onlyProductivity & Workflow
AI-generated overview

Manages WordPress posts, pages, media, categories, tags and menus through WP-CLI or the REST API.

What it does
This skill guides an agent through creating, updating, scheduling and deleting WordPress content such as posts, pages, media attachments, categories, tags and navigation menus. It provides WP-CLI command patterns and REST API request examples, including bulk operations, post meta handling, search-and-replace, and export/import. It also covers verification steps and reporting admin and live URLs for the affected content.
When to use it
Use it when a user wants to publish or edit a WordPress blog post or page, upload media, manage categories, tags or menus, schedule posts, or perform bulk content operations on a WordPress site. It also fits when WP-CLI is unavailable and the REST API with an Application Password must be used instead.
Requirements
Requires a working WP-CLI SSH connection or WordPress REST API credentials (Application Password), plus site configuration from wordpress.config.json or wp-cli.yml. Remote media uploads may need SCP, and REST examples use curl and jq. It ships no scripts; it is instructions only.

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

TaskBest Method
Create/edit single post or pageWP-CLI wp post create/update
Bulk create postsWP-CLI loop or REST API batch
Upload images/mediaWP-CLI wp media import
Manage categories/tagsWP-CLI wp term
Update navigation menusWP-CLI wp menu
Scheduled postsWP-CLI with --post_date
Complex HTML contentWrite to temp file, pass to WP-CLI
No SSH access availableREST API with Application Password

Step 2: Create Content

Blog Posts
bash
# Simple postwp @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
# Post 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
bash
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
bash
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

bash
# Upload from URLwp @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.jpgwp @site media import /tmp/image.jpg --title="Local Upload"
# Import and set as featured image in one stepwp @site media import "https://example.com/hero.jpg" \  --title="Hero" --featured_image --post_id={id}
# List mediawp @site post list --post_type=attachment --fields=ID,post_title,guid
# Regenerate thumbnailswp @site media regenerate --yes

Set featured image on a post:

bash
# 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
bash
# List categorieswp @site term list category --fields=term_id,name,slug,count
# Create categorywp @site term create category "News" --slug=news --description="Company news and updates"
# Create child categorywp @site term create category "Product News" --slug=product-news --parent=5
# Update categorywp @site term update category {term_id} --name="Updated Name"
# Assign category to postwp @site post term add {post_id} category news
Tags
bash
# List tagswp @site term list post_tag --fields=term_id,name,slug,count
# Create tagwp @site term create post_tag "new-tag"
# Add tags during post creationwp @site post create --post_title="..." --tags_input="seo,marketing,tips"
# Add tags to existing postwp @site post term add {post_id} post_tag seo marketing tips

Step 5: Manage Menus

bash
# List menuswp @site menu list --fields=term_id,name,slug,count
# List items in a menuwp @site menu item list main-menu --fields=db_id,type,title,link,position
# Add page to menuwp @site menu item add-post main-menu {page_id} --title="About Us"
# Add custom linkwp @site menu item add-custom main-menu "Contact" "https://example.com/contact/"
# Add category archive to menuwp @site menu item add-term main-menu category {term_id}
# Reorder (set position)wp @site menu item update {item_id} --position=3
# Delete menu itemwp @site menu item delete {item_id}

Step 6: Update Existing Content

bash
# Update post title and contentwp @site post update {post_id} \  --post_title="Updated Title" \  --post_content="<p>New content.</p>"
# Update from filewp @site post update {post_id} ./updated-content.html
# Search postswp @site post list --s="search term" --fields=ID,post_title
# Bulk update statuswp @site post list --post_type=post --post_status=draft --field=ID | \  xargs -I {} wp @site post update {} --post_status=publish
# Delete (trash)wp @site post delete {post_id}
# Delete permanentlywp @site post delete {post_id} --force

Step 7: Post Meta and Custom Fields

bash
# Get all meta for a postwp @site post meta list {post_id} --fields=meta_key,meta_value
# Get specific metawp @site post meta get {post_id} meta_key
# Set metawp @site post meta update {post_id} meta_key "meta_value"
# Add meta (allows duplicates)wp @site post meta add {post_id} meta_key "meta_value"
# Delete metawp @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

bash
# Dry run first — alwayswp @site search-replace "old text" "new text" --dry-run
# Executewp @site search-replace "old text" "new text" --precise
# Limit to specific tablewp @site search-replace "old" "new" wp_posts --precise
# Limit to specific columnwp @site search-replace "old" "new" wp_posts post_content --precise

Step 9: Export and Import

bash
# Export all contentwp @site export --dir=/tmp/
# Export specific post typewp @site export --post_type=post --dir=/tmp/
# Importwp @site import /path/to/file.xml --authors=mapping.csv

Step 10: Verify

bash
# Check the postwp @site post get {post_id} --fields=ID,post_title,post_status,guid
# Get the live URLwp @site post get {post_id} --field=guid
# List recent postswp @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}/

REST API Reference

When WP-CLI is not available, use the WordPress REST API with Application Password auth.

Authentication

bash
# Base64 encode credentialsAUTH=$(echo -n "username:xxxx xxxx xxxx xxxx xxxx xxxx" | base64)
# Use in requestscurl -s https://example.com/wp-json/wp/v2/posts \  -H "Authorization: Basic $AUTH" \  -H "Content-Type: application/json"

Endpoints

ResourceEndpoint
Posts/wp-json/wp/v2/posts
Pages/wp-json/wp/v2/pages
Media/wp-json/wp/v2/media
Categories/wp-json/wp/v2/categories
Tags/wp-json/wp/v2/tags

All support GET (list/single), POST (create), PUT (update), DELETE.

Create Post via REST

bash
curl -s https://example.com/wp-json/wp/v2/posts \  -H "Authorization: Basic $AUTH" \  -H "Content-Type: application/json" \  -d '{    "title": "My New Post",    "content": "<p>Post content here.</p>",    "status": "draft",    "categories": [3, 5],    "tags": [10, 12],    "excerpt": "Brief summary",    "featured_media": 456  }' | jq '{id, link, status}'

Create Page via REST

bash
curl -s https://example.com/wp-json/wp/v2/pages \  -H "Authorization: Basic $AUTH" \  -H "Content-Type: application/json" \  -d '{    "title": "About Us",    "content": "<h2>Our Story</h2><p>Content...</p>",    "status": "publish",    "parent": 0  }'

Upload Media via REST

bash
curl -s https://example.com/wp-json/wp/v2/media \  -H "Authorization: Basic $AUTH" \  -H "Content-Disposition: attachment; filename=photo.jpg" \  -H "Content-Type: image/jpeg" \  --data-binary @photo.jpg | jq '{id, source_url}'

Create Category via REST

bash
curl -s https://example.com/wp-json/wp/v2/categories \  -H "Authorization: Basic $AUTH" \  -H "Content-Type: application/json" \  -d '{"name": "News", "slug": "news", "description": "Company updates"}'

Query Parameters

ParameterPurposeExample
per_pageResults per page (max 100)?per_page=50
pagePagination?page=2
searchSearch term?search=keyword
statusFilter by status?status=draft
categoriesFilter by category ID?categories=3
orderbySort field?orderby=date
orderSort direction?order=desc
_fieldsLimit response fields?_fields=id,title,link

Menus: Navigation menus have limited REST API support. The /wp-json/wp/v2/navigation endpoint exists for block-based navigation in FSE themes. For classic menus, use WP-CLI.


Critical Patterns

HTML Content in WP-CLI

For anything beyond a sentence, write HTML to a temp file and pass it:

bash
cat > /tmp/post-content.html << 'EOF'<h2>Section Heading</h2><p>Paragraph content with <strong>bold</strong> and <a href="/link">links</a>.</p><ul>  <li>List item one</li>  <li>List item two</li></ul>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:

bash
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.5done < posts.csv

Always create as draft first, review, then bulk-publish.

Source and attribution

Source:jezweb/claude-skillsinplugins/wordpress/skills/wordpress-contentat commit64965d9

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

Wordpress Content Agent Skill | SourceWeft