Automate WordPress Content with AI APIs and WP-CLI (Claude, OpenAI)

Creating quality WordPress content at scale is time-consuming—researching topics, writing articles, editing drafts, and formatting posts manually limits how much you can publish. Writers spend hours producing content that AI could generate in minutes.

AI-powered content generation with WP-CLI automates WordPress publishing—generate articles from prompts, create variations, translate content, optimize for SEO, and publish directly to WordPress. Combine Claude API or OpenAI with WP-CLI for scalable content workflows.

In this guide, you’ll learn to build AI content generation systems for WordPress using WP-CLI, with ethical guidelines, API integration patterns, and automation workflows for responsible AI-assisted publishing.

AI Content Generation Ethics

Before building AI content systems, understand ethical implications and responsible use.

Ethical Considerations

Transparency: Disclose AI-generated content to readers when appropriate.

Quality control: Review and edit AI output before publishing.

Originality: Ensure content doesn’t plagiarize or duplicate existing work.

Accuracy: Verify facts, statistics, and claims in AI-generated content.

Human value: Use AI to augment human creativity, not replace it entirely.

Responsible AI Content Guidelines

# Best practices for AI-generated WordPress content

1. Human oversight required
   - Review all AI content before publishing
   - Edit for accuracy, tone, and brand voice
   - Add human expertise and insights

2. Disclosure when appropriate
   - Consider adding AI disclosure for transparency
   - Follow FTC guidelines for automated content

3. Quality over quantity
   - Don't publish low-quality AI content at scale
   - Maintain editorial standards

4. Respect copyrights
   - Don't train on or reproduce copyrighted material
   - Verify AI output is original

5. Value to readers
   - Ensure content serves reader needs
   - Provide genuine value, not just SEO filler

Learn about AI content ethics from the FTC.

Claude API Integration

Integrate Anthropic’s Claude API with WP-CLI for content generation.

Claude API Setup

# Install dependencies
pip install anthropic

# Set API key
export ANTHROPIC_API_KEY="your-api-key-here"

# Test connection
python -c "import anthropic; client = anthropic.Anthropic(); print('Connected')"

Generate Content with Claude

#!/usr/bin/env python3
# generate-with-claude.py

import anthropic
import sys
import os

def generate_article(topic, target_words=1000):
    client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

    prompt = f"""Write a {target_words}-word informative blog post about: {topic}

Include:
- Engaging introduction
- 3-5 main sections with H2 headings
- Practical examples
- Conclusion with key takeaways

Format in markdown."""

    message = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=4096,
        messages=[
            {"role": "user", "content": prompt}
        ]
    )

    return message.content[0].text

if __name__ == "__main__":
    topic = sys.argv[1] if len(sys.argv) > 1 else "WordPress automation"

    print(generate_article(topic))

Usage:

python generate-with-claude.py "WP-CLI best practices" > article.md

Publish to WordPress

#!/bin/bash
# ai-to-wordpress.sh - Generate and publish AI content

TOPIC="$1"
CATEGORY_ID="${2:-1}"

if [ -z "$TOPIC" ]; then
    echo "Usage: $0 <topic> [category_id]"
    exit 1
fi

echo "Generating content for: $TOPIC"

# Generate content with Claude
CONTENT=$(python generate-with-claude.py "$TOPIC")

# Create WordPress post as draft for review
POST_ID=$(wp post create \
    --post_title="$TOPIC" \
    --post_content="$CONTENT" \
    --post_status=draft \
    --post_category=$CATEGORY_ID \
    --porcelain)

echo "✓ Draft created: Post ID $POST_ID"
echo "Review at: $(wp option get siteurl)/wp-admin/post.php?post=$POST_ID&action=edit"

Learn about Claude API.

OpenAI Integration

Use OpenAI’s GPT models for WordPress content generation.

OpenAI Setup

# Install OpenAI library
pip install openai

# Set API key
export OPENAI_API_KEY="your-api-key-here"

Generate with GPT-4

#!/usr/bin/env python3
# generate-with-openai.py

from openai import OpenAI
import sys
import os

def generate_article(topic, model="gpt-4"):
    client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

    response = client.chat.completions.create(
        model=model,
        messages=[
            {"role": "system", "content": "You are a professional content writer creating high-quality WordPress blog posts."},
            {"role": "user", "content": f"Write a comprehensive 1000-word blog post about: {topic}. Include clear headings, practical examples, and actionable takeaways. Format in markdown."}
        ],
        temperature=0.7,
        max_tokens=2000
    )

    return response.choices[0].message.content

if __name__ == "__main__":
    topic = sys.argv[1] if len(sys.argv) > 1 else "WordPress development"
    print(generate_article(topic))

Batch Content Generation

#!/bin/bash
# batch-generate-content.sh - Generate multiple posts

TOPICS_FILE="$1"

if [ ! -f "$TOPICS_FILE" ]; then
    echo "Usage: $0 <topics-file>"
    echo "Topics file should contain one topic per line"
    exit 1
fi

while read -r TOPIC; do
    echo "Generating: $TOPIC"

    # Generate content
    CONTENT=$(python generate-with-claude.py "$TOPIC")

    # Create draft post
    POST_ID=$(wp post create \
        --post_title="$TOPIC" \
        --post_content="$CONTENT" \
        --post_status=draft \
        --porcelain)

    echo "✓ Created draft: $POST_ID"

    # Rate limiting
    sleep 2
done < "$TOPICS_FILE"

echo "✓ Batch generation complete"

Content Enhancement

Use AI to improve existing WordPress content.

SEO Optimization

#!/usr/bin/env python3
# optimize-for-seo.py

import anthropic
import sys
import os

def optimize_content(original_content, focus_keyword):
    client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

    prompt = f"""Optimize this content for SEO targeting the keyword: {focus_keyword}

Original content:
{original_content}

Improve:
- Keyword density (natural placement)
- Meta description suggestion
- H2/H3 headings with keyword variations
- Internal linking opportunities

Provide the optimized version."""

    message = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=4096,
        messages=[{"role": "user", "content": prompt}]
    )

    return message.content[0].text

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: optimize-for-seo.py <post_id> <focus_keyword>")
        sys.exit(1)

    post_id = sys.argv[1]
    keyword = sys.argv[2]

    # Get original content (would use wp-cli here)
    content = sys.stdin.read()

    print(optimize_content(content, keyword))

Content Expansion

#!/bin/bash
# expand-content.sh - Expand short posts with AI

MIN_WORDS=300
TARGET_WORDS=1000

# Find short posts
SHORT_POSTS=$(wp post list \
    --post_status=publish \
    --format=ids \
    --fields=ID,post_content \
    | while read POST_ID; do
        WORD_COUNT=$(wp post get $POST_ID --field=post_content | wc -w)
        if [ "$WORD_COUNT" -lt "$MIN_WORDS" ]; then
            echo "$POST_ID"
        fi
    done)

for POST_ID in $SHORT_POSTS; do
    echo "Expanding post: $POST_ID"

    TITLE=$(wp post get $POST_ID --field=post_title)
    CONTENT=$(wp post get $POST_ID --field=post_content)

    # Generate expanded version
    EXPANDED=$(python -c "
import anthropic, os
client = anthropic.Anthropic(api_key=os.environ.get('ANTHROPIC_API_KEY'))
message = client.messages.create(
    model='claude-3-5-sonnet-20241022',
    max_tokens=2048,
    messages=[{
        'role': 'user',
        'content': f'''Expand this article to approximately $TARGET_WORDS words while maintaining quality:

Title: $TITLE

Current content:
$CONTENT

Add more detail, examples, and value while staying on topic.'''
    }]
)
print(message.content[0].text)
")

    # Save as revision (create new draft for review)
    wp post create \
        --post_title="$TITLE (Expanded)" \
        --post_content="$EXPANDED" \
        --post_status=draft

    echo "✓ Expanded version created for review"
done

Automated Publishing Workflows

Build complete AI-powered content pipelines.

Daily Auto-Publish System

#!/bin/bash
# daily-ai-content.sh - Generate and publish content daily

TOPICS=(
    "WordPress security best practices"
    "WP-CLI productivity tips"
    "WordPress performance optimization"
    "Content management automation"
)

# Select random topic
TOPIC="${TOPICS[$RANDOM % ${#TOPICS[@]}]}"

echo "Generating daily content: $TOPIC"

# Generate with AI
CONTENT=$(python generate-with-claude.py "$TOPIC")

# Add disclaimer
DISCLAIMER="<em>Note: This article was generated with AI assistance and reviewed by our editorial team.</em>"

FULL_CONTENT="${CONTENT}


${DISCLAIMER}"

# Create post
POST_ID=$(wp post create \
    --post_title="$TOPIC" \
    --post_content="$FULL_CONTENT" \
    --post_status=draft \
    --post_category=5 \
    --tags_input="ai-generated,automation" \
    --porcelain)

# Set featured image (from Unsplash API - separate integration)
# Add meta fields for tracking
wp post meta add $POST_ID ai_generated "true"
wp post meta add $POST_ID generation_date "$(date +%Y-%m-%d)"

echo "✓ Draft created: $POST_ID"
echo "Review and publish at: $(wp option get siteurl)/wp-admin/post.php?post=$POST_ID&action=edit"

Schedule with cron:

# Run daily at 8 AM
0 8 * * * /usr/local/bin/daily-ai-content.sh

Content Translation

#!/usr/bin/env python3
# translate-post.py - Translate WordPress posts with AI

import anthropic
import sys
import os

def translate_content(content, target_language):
    client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))

    message = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=4096,
        messages=[{
            "role": "user",
            "content": f"Translate this content to {target_language}. Maintain formatting and structure:\n\n{content}"
        }]
    )

    return message.content[0].text

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: translate-post.py <post_id> <language>")
        sys.exit(1)

    post_id = sys.argv[1]
    language = sys.argv[2]

    # Read from stdin
    content = sys.stdin.read()

    print(translate_content(content, language))

Usage:

# Translate post to Spanish
wp post get 123 --field=post_content | python translate-post.py 123 "Spanish" | \
wp post create --post_title="Translated Post" --post_content=-

Quality Control

Implement checks to ensure AI content quality.

Content Review Checklist

#!/bin/bash
# review-ai-content.sh - Quality check for AI posts

POST_ID="$1"

echo "Reviewing AI-generated post: $POST_ID"

# Check word count
WORD_COUNT=$(wp post get $POST_ID --field=post_content | wc -w)
echo "Word count: $WORD_COUNT"

if [ "$WORD_COUNT" -lt 300 ]; then
    echo "⚠ Content too short"
fi

# Check for common AI phrases
CONTENT=$(wp post get $POST_ID --field=post_content)

AI_PHRASES=(
    "as an AI"
    "I don't have"
    "I cannot"
    "my knowledge cutoff"
)

for PHRASE in "${AI_PHRASES[@]}"; do
    if echo "$CONTENT" | grep -qi "$PHRASE"; then
        echo "⚠ Found AI artifact: '$PHRASE'"
    fi
done

# Check readability
TITLE=$(wp post get $POST_ID --field=post_title)
if [ ${#TITLE} -gt 60 ]; then
    echo "⚠ Title too long for SEO"
fi

# Check for images
IMAGE_COUNT=$(echo "$CONTENT" | grep -c '<img')
if [ "$IMAGE_COUNT" -eq 0 ]; then
    echo "⚠ No images in content"
fi

echo "✓ Review complete"

Cost Management

Track and control AI API costs.

API Usage Tracking

#!/bin/bash
# track-ai-costs.sh

LOG_FILE="/var/log/ai-content-costs.log"

log_generation() {
    local model="$1"
    local tokens="$2"
    local cost="$3"

    echo "$(date +%Y-%m-%d),$(date +%H:%M:%S),$model,$tokens,$cost" >> "$LOG_FILE"
}

# After each generation
log_generation "claude-3-sonnet" "2048" "0.06"

# Monthly report
generate_cost_report() {
    echo "AI Content Generation Cost Report"
    echo "Month: $(date +%Y-%m)"
    echo "=================================="

    TOTAL_COST=$(awk -F',' '{sum += $5} END {print sum}' "$LOG_FILE")
    TOTAL_POSTS=$(wc -l < "$LOG_FILE")

    echo "Total generations: $TOTAL_POSTS"
    echo "Total cost: \$$TOTAL_COST"
    echo "Average per post: \$$(echo "scale=2; $TOTAL_COST / $TOTAL_POSTS" | bc)"
}

Next Steps

You now have AI-powered content generation capabilities for WordPress.

Week 1: Basic integration

  • Set up Claude/OpenAI APIs
  • Generate test content
  • Publish to WordPress

Week 2: Automation

  • Build generation scripts
  • Schedule automated publishing
  • Implement quality checks

Week 3: Enhancement

  • Add SEO optimization
  • Implement translations
  • Create content variations

Week 4: Production

  • Cost tracking
  • Quality control systems
  • Editorial workflows

Advanced Topics

  1. Fine-tuning Models – Custom AI models for your brand
  2. Multi-modal Content – Generate images with text
  3. Content Personalization – AI-driven user targeting

Get More Resources

Download AI integration scripts including:

  • Complete generation system
  • Quality control tools
  • Cost tracking utilities

Join our email course for:

  • Weekly WP-CLI tutorials
  • AI content strategies
  • Automation best practices

Conclusion

AI-powered content generation with WP-CLI enables scalable WordPress publishing while maintaining quality through human oversight and ethical practices.

What we covered:

✅ Ethical AI content guidelines
✅ Claude and OpenAI API integration
✅ Automated content generation workflows
✅ Content enhancement and optimization
✅ Quality control and review systems
✅ Cost tracking and management

Use AI responsibly as a tool to augment human creativity—review all content, ensure accuracy, provide genuine value to readers, and maintain editorial standards.

Ready for more? Learn content strategy or SEO automation.

Questions about AI content generation for WordPress? Drop a comment below!

Found this helpful? Share responsibly with other content creators.