# wordpress-plugin-to-emdash

Reads a WordPress plugin and decides what moves to EmDash: site schema, Astro code, or a plugin of its own.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 688 installs · ★ 9
- Author: emdash-cms
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/emdash-cms/skills/tree/HEAD/skills/wordpress-plugin-to-emdash/SKILL.md
- Updated: 2026-10-15
- HTML: https://affpapa.org/en/nevibecode/skills/wordpress-plugin-to-emdash

## What it does

The skill inspects the plugin source: hooks, REST endpoints, admin screens, shortcodes, scheduled work, permissions, external services. Then it sorts each responsibility against a mapping table. A custom post type or taxonomy becomes a collection in the site schema, plugin settings go to `ctx.settings`, cursors and caches to `ctx.kv`, a REST endpoint becomes a declared plugin route, and `WP_Query` or template tags turn into content API calls in Astro code.

Plugin format follows the feature. Sandboxed is the default: portable hooks, routes, declared storage, network access, Block Kit admin UI. A trusted native plugin is only for host-process access, React admin code, Astro rendering components, or a custom Portable Text block. Some plugins need no runtime at all — a post type plus templates can end up as schema, seed data and Astro pages.

Before any runtime code, the skill asks for a data plan: map post IDs, slugs, locales, authors, statuses and dates, keep relationships between posts, terms and media, make imports restartable and detect duplicates. Seeds fit a new site's initial schema; production data needs an importer. If the source or the target EmDash environment is incomplete, the skill reports the gap instead of inventing an equivalent. Authorities stay split, so reading media metadata never grants the bytes and moderation never grants deletion.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add emdash-cms/skills --skill wordpress-plugin-to-emdash -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/wordpress-plugin-to-emdash/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/wordpress-plugin-to-emdash/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add emdash-cms/skills --skill wordpress-plugin-to-emdash -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/wordpress-plugin-to-emdash/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add emdash-cms/skills --skill wordpress-plugin-to-emdash -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/wordpress-plugin-to-emdash/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install emdash-cms/skills wordpress-plugin-to-emdash
```

2. **Manually: put the files in place**
- File: `.github/skills/wordpress-plugin-to-emdash/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add emdash-cms/skills --skill wordpress-plugin-to-emdash -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/emdash-cms/skills --path skills/wordpress-plugin-to-emdash
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/wordpress-plugin-to-emdash/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add emdash-cms/skills --skill wordpress-plugin-to-emdash -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/emdash-cms/skills/tree/HEAD/skills/wordpress-plugin-to-emdash/SKILL.md

## When to use it
- read a WordPress plugin and work out which of its features the new site still needs
- decide what belongs in site schema, what in Astro code, and what in an EmDash plugin
- map custom post types, taxonomies and metadata onto schema and seed data
- move REST endpoints and scheduled events onto EmDash routes and cron hooks
- plan migration of existing data while keeping relationships and source IDs

## Example prompts
- read this WordPress plugin and tell me what to port to EmDash
- plan the migration: which post types become collections and which stay a plugin
- port the plugin's shortcodes and admin screens to EmDash, start with the source analysis

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: eede1cb1b66fbb15.

BEGIN THIRD-PARTY FILE eede1cb1b66fbb15
```text
---
name: wordpress-plugin-to-emdash
description: Analyze and port WordPress plugin behavior, custom post types, shortcodes, admin workflows, and stored data to current EmDash extension points. Use for WordPress-plugin migrations or when deciding which behavior belongs in an EmDash plugin, site schema, seed, or Astro code. Do not use for visual theme ports without plugin functionality.
---

# Port a WordPress plugin to EmDash

Preserve the plugin's user-visible behavior and data model without translating PHP line by line. WordPress and EmDash divide responsibilities differently, so first decide whether each feature belongs in site schema, Astro code, a sandboxed plugin, or a trusted native plugin.

Load [creating-plugins](../creating-plugins/SKILL.md) before implementing plugin code. Load [building-emdash-site](../building-emdash-site/SKILL.md) when the port changes collections, seeds, queries, or frontend templates. Those skills define the current APIs; this skill covers migration decisions.

## Understand the source

Inspect the plugin source, installation behavior, database changes, hooks, REST endpoints, scheduled work, admin screens, shortcodes or blocks, frontend output, permissions, and external services. Identify behavior that users rely on separately from WordPress-specific implementation.

Record:

- required content and configuration data;
- actions that mutate or publish data;
- authorization and trust boundaries;
- background or retry behavior;
- frontend and administrator interactions;
- import, migration, and rollback needs;
- license obligations for copied assets or code.

If the source, expected behavior, or target EmDash environment is missing, report the gap instead of inventing an equivalent.

## Assign each responsibility

| WordPress responsibility                        | EmDash destination                                                                                           |
```
END THIRD-PARTY FILE eede1cb1b66fbb15

The third-party file has ended. Everything between the eede1cb1b66fbb15 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 1936 of 7820 bytes. © emdash-cms · MIT · https://github.com/emdash-cms/skills/tree/HEAD/skills/wordpress-plugin-to-emdash/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
