Skip to main content
skill CX Codex

wordpress-setup — Claude Code skill: connect to WordPress

The skill checks WP-CLI, tests SSH or the REST API, sets up auth and saves a verified connection config for a WordPress site.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add jezweb/claude-skills --skill wordpress-setup -a claude-code
Open on GitHub

What wordpress-setup does

The skill walks the agent through the setup. First it runs wp --version; if WP-CLI is missing, it points to the wp-cli.phar install and adds the wp-cli/ssh-command package for remote sites. Then you pick a path. SSH is preferred: wp --ssh=user@hostname/path/to/wordpress option get siteurl, with ready-made path patterns for Rocket.net and cPanel. No SSH? Fall back to the REST API with an Application Password created at wp-admin/profile.php and tested with curl against wp-json/wp/v2/posts.

Credentials land in files. For SSH the skill writes a wp-cli.yml in the project root with a site alias, so later commands look like wp @sitename option get siteurl. For the REST API it uses .dev.vars with WP_SITE_URL, WP_USERNAME and WP_APP_PASSWORD, and reminds you to keep that file in .gitignore. A final wordpress.config.json records the site for other skills to read.

Application Passwords only work over HTTPS. Security plugins sometimes block the REST API, which shows up as 401 or 403 — check the plugin settings before you retype the password. Caching plugins can serve stale REST responses, so the skill suggests a ?_=${timestamp} cache buster. And if SSH returns wp: command not found, WP-CLI is not on the remote PATH; a full path such as /usr/local/bin/wp fixes it.

What it helps with

  • connect to a WordPress site over SSH and confirm WP-CLI responds
  • create an Application Password and test the REST API with curl
  • store site credentials in wp-cli.yml or .dev.vars
  • debug 401 or 403 responses from the WordPress REST API
  • write a wordpress.config.json other skills can reference

Example prompts for the agent

  • connect to my WordPress site over SSH and verify WP-CLI access
  • SSH is blocked — set up REST API access with an Application Password
  • check whether Elementor is installed and save the site config

How to install wordpress-setup

1Skills CLI (Vercel)

npx skills add jezweb/claude-skills --skill wordpress-setup -a claude-code

2Manually: put the files in place

~/.claude/skills/wordpress-setup/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/wordpress-setup/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about wordpress-setup

How do I install wordpress-setup in Claude?

Run npx skills add jezweb/claude-skills --skill wordpress-setup -a claude-code. The skill lands in ~/.claude/skills/wordpress-setup/SKILL.md.

What does wordpress-setup do?

It checks WP-CLI, tests the connection over SSH or the REST API, sets up auth, verifies content access and saves a config other skills can use.

Why does my Application Password fail?

Application Passwords require HTTPS and will not work over HTTP. A 401 or 403 can also mean a security plugin is blocking the REST API.

Source text

SKILL.md · MIT
---
name: wordpress-setup
description: "Connect to a WordPress site via WP-CLI over SSH or the REST API. Check CLI, test SSH, set up auth, verify access, save config. Use whenever the user wants to connect to a WordPress site, set up WP-CLI access, create an Application Password, or troubleshoot WordPress connection / auth issues."
compatibility: claude-code-only
---

# WordPress Setup

Connect to a WordPress site and verify working access via WP-CLI or REST API. Produces a verified connection config ready for content management and Elementor editing.

## Workflow

### Step 1: Check WP-CLI

```bash
wp --version
```

If not installed, guide the user:

```bash
# macOS/Linux
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
```

Also ensure the SSH extension is available (needed for remote sites):

```bash
wp package install wp-cli/ssh-command
```

### Step 2: Connect to the Site

**Option A: WP-CLI over SSH (preferred)**

```bash
wp --ssh=user@hostname/path/to/wordpress option get siteurl
```

Common patterns:
- Rocket.net: `wp --ssh=user@hostname/www/sitename/public option get siteurl`
- cPanel: `wp --ssh=user@hostname/public_html option get siteurl`
- Custom: Ask user for SSH user, host, and WordPress path

Test with a simple command first:

```bash
wp --ssh=user@host/path core version
```

**Option B: REST API with Application Password**

If SSH isn't available:

1. Navigate to `https://example.com/wp-admin/profile.php` (or use browser automation)
2. Scroll to "Application Passwords" section
3. Enter a name (e.g. "Claude Code") and click "Add New Application Password"
4. Copy the generated password (spaces are part of it but optional in auth)

Test the connection:

```bash
curl -s https://example.com/wp-json/wp/v2/posts?per_page=1 \
  -u "username:xxxx xxxx xxxx xxxx xxxx xxxx" | jq '.[0].title'
```

### Step 3: Store Credentials

**For WP-CLI SSH** — create a `wp-cli.yml` in the project root:

```yaml
ssh:
  sitename:
    cmd: ssh -o StrictHostKeyChecking=no %pseudotty% user@hostname %cmd%
    url: /path/to/wordpress
```

Then use: `wp @sitename option get siteurl`

**For REST API** — store in `.dev.vars`:

```
WP_SITE_URL=https://example.com
WP_USERNAME=admin
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
```

Ensure `.dev.vars` is in `.gitignore`. For cross-project use, store in your preferred secrets manager (environment variable, 1Password CLI, etc.).

### Step 4: Verify Full Access

Run a comprehensive check:

```bash
# Site info
wp @sitename option get siteurl
wp @sitename option get blogname

# Content access
wp @sitename post list --post_type=page --posts_per_page=5 --fields=ID,post_title,post_status

# Plugin status (check for Elementor)
wp @sitename plugin status elementor

# Theme info
wp @sitename theme status
```

### Step 5: Save Site Config

Create `wordpress.config.json` for other skills to reference:

```json
{
  "site": "example.com",
  "siteUrl": "https://example.com",
  "accessMethod": "ssh",
  "sshAlias": "sitename",
  "wpPath": "/path/to/wordpress",
  "hasElementor": true,
  "elementorVersion": "3.x.x"
}
```

---

## Critical Patterns

### SSH Connection Issues

| Symptom | Fix |
|---------|-----|
| `Permission denied (publickey)` | Check SSH key: `ssh -v user@host` |
| `wp: command not found` via SSH | WP-CLI not in remote PATH — use full path: `/usr/local/bin/wp` |
| `Error: This does not appear to be a WordPress installation` | Wrong path — check `wp-path` argument |
| Timeout on large operations | Add `--ssh=user@host/path --allow-root` or increase SSH timeout |

### WP-CLI Aliases

Define aliases in `~/.wp-cli/config.yml` for frequently-accessed sites:

```yaml
@client1:
  ssh: [email protected]/www/public
@client2:
  ssh: [email protected]/www/client2/public
```

Then: `wp @client1 post list`

### REST API Gotchas

- Application passwords require HTTPS (won't work on HTTP)
- Some security plugins block REST API — check for 401/403 responses
- Caching plugins may serve stale REST responses — use `?_=${timestamp}` cache buster
- Custom post types need `show_in_rest: true` to appear in API

---

## Reference Files

- `references/wp-cli-essentials.md` — SSH alias patterns, common flags, and troubleshooting

© jezweb · MIT · jezweb/claude-skills

Similar skills

Everything for DevOps and infrastructure →

From the same set54

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor