Back to Skills
    🦞

    pinch-to-post

    WordPress automation for Clawdbot.

    By @nickhamze
    View on GitHub
    SKILL.md
    ---
    name: pinch-to-post
    description: WordPress automation for Clawdbot. Manage posts, pages, WooCommerce products, orders, inventory, comments, SEO (Yoast/RankMath), media via REST API or WP-CLI. Multi-site support, bulk operations, content health checks, markdown to Gutenberg, social cross-posting. 50+ featuresβ€”just ask.
    metadata: {"clawdbot":{"emoji":"🦞","skillKey":"pinch-to-post","primaryEnv":"WP_APP_PASSWORD","requires":{"anyBins":["curl","wp"]}}}
    user-invocable: true
    ---
    
    # 🦞 Pinch to Post `v3.1.0`
    
    **Your WordPress site just got claws.**
    
    The only WordPress skill you'll ever need. 50+ features. Zero admin panels. Just tell me what you want.
    
    > **Keywords:** WordPress, WooCommerce, REST API, WP-CLI, blog automation, content management, ecommerce, posts, pages, media, comments, SEO, Yoast, RankMath, inventory, orders, coupons, bulk operations, multi-site, Gutenberg, publishing
    
    
    ## ⚑ Watch This
    
    ```
    You: "Create a post about sustainable coffee farming"
    Bot: Done. Draft #1247 created. Want me to add a featured image?
    
    You: "Publish all my drafts from this week"  
    Bot: Published 8 posts. Here are the links...
    
    You: "Approve the good comments, spam the bots"
    Bot: Approved 12, marked 47 as spam. Your comment section is clean.
    ```
    
    No clicking. No admin panels. No friction.
    
    
    ## πŸ† Why Pinch to Post?
    
    | Task | Manual (WP Admin) | With Pinch to Post |
    |------|-------------------|-------------------|
    | Create 10 posts | 15-20 minutes | 30 seconds |
    | Update inventory on 50 products | 45 minutes | 1 minute |
    | Moderate 100 comments | 20 minutes | 10 seconds |
    | Check content health on 5 posts | 30 minutes | 15 seconds |
    | Export all posts to markdown | Hours | 5 seconds |
    
    **Time saved per week:** 2-4 hours. **Sanity saved:** Immeasurable.
    
    
    ## πŸ†• What's New in v3.0
    
    - **Markdown to Gutenberg** β€” Write markdown, publish as blocks
    - **Content Health Scores** β€” Know if your post is ready before you publish
    - **Social Cross-Posting** β€” Twitter, LinkedIn, Mastodon in one command
    - **Content Calendar** β€” See your whole publishing schedule
    - **Bulk Operations** β€” Mass publish, delete, approve
    - **Multi-Site Management** β€” Control all your sites from one place
    
    
    ## πŸ’¬ What People Are Saying
    
    > *"I used to spend my Sunday mornings moderating comments. Now I just say 'clean up the comments' and go make pancakes."*
    
    > *"We manage 12 WordPress sites. This turned a full-time job into a 10-minute daily check-in."*
    
    > *"I didn't know I needed this until I had it. Now I can't go back."*
    
    
    ## πŸ“Š Performance
    
    Tested and optimized for:
    - Sites with **50,000+ posts**
    - WooCommerce stores with **10,000+ products**
    - Media libraries with **100,000+ files**
    
    Rate limiting built-in. Won't hammer your server.
    
    
    ## Quick Setup (60 Seconds)
    
    ### Step 1: Get Your Password
    
    WordPress Admin β†’ Users β†’ Profile β†’ Application Passwords β†’ Add New β†’ Copy it
    
    ### Step 2: Configure Me
    
    ```json
    {
      "skills": {
        "entries": {
          "pinch-to-post": {
            "enabled": true,
            "env": {
              "WP_SITE_URL": "https://your-site.com",
              "WP_USERNAME": "admin",
              "WP_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
            }
          }
        }
      }
    }
    ```
    
    ### Step 3: There Is No Step 3
    
    You're done. Go publish something.
    
    
    ## Running Multiple Sites? You Overachiever.
    
    ```json
    {
      "env": {
        "WP_DEFAULT_SITE": "blog",
        "WP_SITE_BLOG_URL": "https://blog.example.com",
        "WP_SITE_BLOG_USER": "admin",
        "WP_SITE_BLOG_PASS": "xxxx xxxx xxxx",
        "WP_SITE_SHOP_URL": "https://shop.example.com",
        "WP_SITE_SHOP_USER": "admin", 
        "WP_SITE_SHOP_PASS": "yyyy yyyy yyyy",
        "WP_SITE_DOCS_URL": "https://docs.example.com",
        "WP_SITE_DOCS_USER": "editor",
        "WP_SITE_DOCS_PASS": "zzzz zzzz zzzz"
      }
    }
    ```
    
    Now say "list posts on the shop site" and feel like a wizard.
    
    
    ## Got WooCommerce? Even Better.
    
    ```json
    {
      "env": {
        "WC_CONSUMER_KEY": "ck_xxxxxxxxxxxxxxxx",
        "WC_CONSUMER_SECRET": "cs_xxxxxxxxxxxxxxxx"
      }
    }
    ```
    
    Products, orders, inventory, coupons, sales reports. All yours.
    
    
    ## Want Social Cross-Posting? (Fancy!)
    
    ```json
    {
      "env": {
        "TWITTER_API_KEY": "...",
        "TWITTER_API_SECRET": "...",
        "TWITTER_ACCESS_TOKEN": "...",
        "TWITTER_ACCESS_SECRET": "...",
        "LINKEDIN_ACCESS_TOKEN": "...",
        "MASTODON_INSTANCE": "https://mastodon.social",
        "MASTODON_ACCESS_TOKEN": "..."
      }
    }
    ```
    
    One post. Three platforms. Zero extra work.
    
    
    # The Feature Feast 🍽️
    
    Everything below is what I can do. It's a lot. Grab a snack.
    
    
    ## Posts & Pages
    
    The bread and butter. The peanut butter and jelly. The... you get it.
    
    ### Create a Post
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/posts" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Post Title",
        "content": "<!-- wp:paragraph --><p>Your brilliant words here</p><!-- /wp:paragraph -->",
        "excerpt": "Brief summary for SEO nerds",
        "status": "draft",
        "categories": [1, 5],
        "tags": [10, 15],
        "featured_media": 123
      }'
    ```
    
    ### Update a Post
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/posts/{id}" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{"title": "Even Better Title", "status": "publish"}'
    ```
    
    ### Delete a Post (Goodbye, Old Friend)
    
    ```bash
    # Soft delete (trash)
    curl -X DELETE "${WP_SITE_URL}/wp-json/wp/v2/posts/{id}" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    
    # Hard delete (gone forever)
    curl -X DELETE "${WP_SITE_URL}/wp-json/wp/v2/posts/{id}?force=true" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    ```
    
    ### Find Your Posts
    
    ```bash
    # Recent stuff
    curl -s "${WP_SITE_URL}/wp-json/wp/v2/posts?per_page=20&status=any" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    
    # Search (where did I put that post about llamas?)
    curl -s "${WP_SITE_URL}/wp-json/wp/v2/posts?search=llamas" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    
    # By category
    curl -s "${WP_SITE_URL}/wp-json/wp/v2/posts?categories=5" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    
    # By date (time travelers welcome)
    curl -s "${WP_SITE_URL}/wp-json/wp/v2/posts?after=2026-01-01T00:00:00&before=2026-01-31T23:59:59" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    ```
    
    ### Schedule a Post (Future You Will Thank You)
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/posts" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "This Post Is From The Future",
        "content": "Scheduled content, so fancy",
        "status": "future",
        "date": "2026-02-15T10:00:00"
      }'
    ```
    
    ### Pages Too!
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/pages" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "About Us (We're Pretty Great)",
        "content": "Page content here",
        "status": "publish",
        "template": "templates/full-width.php"
      }'
    ```
    
    
    ## Media Management
    
    Pictures! Videos! PDFs! All the things!
    
    ### Upload an Image
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/media" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Disposition: attachment; filename=masterpiece.jpg" \
      -H "Content-Type: image/jpeg" \
      --data-binary @/path/to/masterpiece.jpg
    ```
    
    ### Add Alt Text (Because Accessibility Matters)
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/media/${MEDIA_ID}" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Hero Image",
        "alt_text": "A majestic llama wearing sunglasses",
        "caption": "Living its best life"
      }'
    ```
    
    ### Set Featured Image
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/posts/{post_id}" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{"featured_media": 456}'
    ```
    
    
    ## Categories & Tags
    
    Organize your chaos.
    
    ### List Categories
    
    ```bash
    curl -s "${WP_SITE_URL}/wp-json/wp/v2/categories?per_page=100&hide_empty=false" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    ```
    
    ### Create a Category
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/categories" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{"name": "Hot Takes", "slug": "hot-takes", "description": "Opinions nobody asked for"}'
    ```
    
    ### Tags Work the Same Way
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/tags" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{"name": "must-read", "slug": "must-read"}'
    ```
    
    
    ## Comments
    
    The good, the bad, and the spammy.
    
    ### See Pending Comments
    
    ```bash
    curl -s "${WP_SITE_URL}/wp-json/wp/v2/comments?status=hold" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}"
    ```
    
    ### Approve a Comment
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/comments/{id}" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{"status": "approved"}'
    ```
    
    ### Mark as Spam (Begone, Bot!)
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/comments/{id}" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{"status": "spam"}'
    ```
    
    ### Reply to a Comment (Be Nice)
    
    ```bash
    curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/comments" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d '{
        "post": {post_id},
        "parent": {comment_id},
        "content": "Thanks for reading! You rock."
      }'
    ```
    
    ### Bulk Approve Everything (YOLO Mode)
    
    ```bash
    for id in $(curl -s "${WP_SITE_URL}/wp-json/wp/v2/comments?status=hold&per_page=100" \
      -u "${WP_USERNAME}:${WP_APP_PASSWORD}" | jq -r '.[].id'); do
      curl -X POST "${WP_SITE_URL}/wp-json/wp/v2/comments/${id}" \
        -u "${WP_USERNAME}:${WP_APP_PASSWORD}" \
        -H "Content-Type: application/json" \
        -d '{"status": "approved"}'
    done
    ```
    
    
    ## WooCommerce πŸ›’
    
    Ka-ching! Let's make some money.
    
    ### Products
    
    ```bash
    # List 'em
    curl -s "${WP_SITE_URL}/wp-json/wc/v3/products?per_page=20" \
      -u "${WC_CONSUMER_KEY}:${WC_CONSUMER_SECRET}"
    
    # Create one
    curl -X POST "${W
    
    ... (truncated)