claude-plugin-wordpress-manager 2.9.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/agents/wp-content-strategist.md +58 -1
  3. package/agents/wp-distribution-manager.md +39 -6
  4. package/docs/GUIDE.md +145 -14
  5. package/docs/plans/2026-03-01-tier6-7-design.md +246 -0
  6. package/docs/plans/2026-03-01-tier6-7-implementation.md +1629 -0
  7. package/hooks/hooks.json +18 -0
  8. package/package.json +6 -3
  9. package/servers/wp-rest-bridge/build/tools/index.js +9 -0
  10. package/servers/wp-rest-bridge/build/tools/linkedin.js +203 -0
  11. package/servers/wp-rest-bridge/build/tools/schema.js +159 -0
  12. package/servers/wp-rest-bridge/build/tools/twitter.js +183 -0
  13. package/servers/wp-rest-bridge/build/wordpress.js +94 -0
  14. package/skills/wordpress-router/references/decision-tree.md +10 -2
  15. package/skills/wp-content-generation/SKILL.md +128 -0
  16. package/skills/wp-content-generation/references/brief-templates.md +151 -0
  17. package/skills/wp-content-generation/references/generation-workflow.md +132 -0
  18. package/skills/wp-content-generation/references/outline-patterns.md +188 -0
  19. package/skills/wp-content-generation/scripts/content_gen_inspect.mjs +90 -0
  20. package/skills/wp-content-repurposing/SKILL.md +13 -0
  21. package/skills/wp-content-repurposing/references/auto-transform-pipeline.md +128 -0
  22. package/skills/wp-content-repurposing/references/transform-templates.md +304 -0
  23. package/skills/wp-linkedin/SKILL.md +96 -0
  24. package/skills/wp-linkedin/references/linkedin-analytics.md +58 -0
  25. package/skills/wp-linkedin/references/linkedin-posting.md +53 -0
  26. package/skills/wp-linkedin/references/linkedin-setup.md +59 -0
  27. package/skills/wp-linkedin/scripts/linkedin_inspect.mjs +55 -0
  28. package/skills/wp-structured-data/SKILL.md +94 -0
  29. package/skills/wp-structured-data/references/injection-patterns.md +160 -0
  30. package/skills/wp-structured-data/references/schema-types.md +127 -0
  31. package/skills/wp-structured-data/references/validation-guide.md +89 -0
  32. package/skills/wp-structured-data/scripts/schema_inspect.mjs +88 -0
  33. package/skills/wp-twitter/SKILL.md +101 -0
  34. package/skills/wp-twitter/references/twitter-analytics.md +60 -0
  35. package/skills/wp-twitter/references/twitter-posting.md +66 -0
  36. package/skills/wp-twitter/references/twitter-setup.md +62 -0
  37. package/skills/wp-twitter/scripts/twitter_inspect.mjs +58 -0
@@ -0,0 +1,188 @@
1
+ # Outline Patterns
2
+
3
+ ## Pattern 1: Standard Article
4
+
5
+ For blog posts, opinion pieces, and informational content.
6
+
7
+ ```
8
+ # [Title with Primary Keyword]
9
+
10
+ ## Introduction (~150 words)
11
+ - Hook: surprising fact, question, or relatable scenario
12
+ - Context: why this matters to the reader
13
+ - Promise: what the reader will learn
14
+
15
+ ## [H2 Section 1: Main Topic] (~200-300 words)
16
+ - Key point with supporting evidence
17
+ - Example or data point
18
+ - [Secondary keyword naturally placed]
19
+
20
+ ## [H2 Section 2: Subtopic] (~200-300 words)
21
+ - Key point
22
+ - Comparison or contrast
23
+ - Practical application
24
+
25
+ ## [H2 Section 3: Subtopic] (~200-300 words)
26
+ - Key point
27
+ - Real-world example
28
+ - Expert quote or data
29
+
30
+ ## [H2 Section 4: Practical Application] (~200-300 words)
31
+ - How to apply the knowledge
32
+ - Common mistakes to avoid
33
+ - Tips for success
34
+
35
+ ## Conclusion (~150 words)
36
+ - Summary of key takeaways
37
+ - Final thought or call to action
38
+ - Internal link to related content
39
+
40
+ ---
41
+ Target: 1,200-1,500 words | 4-5 H2 sections | 2-3 internal links
42
+ ```
43
+
44
+ ## Pattern 2: Tutorial / How-To
45
+
46
+ For step-by-step instructional content.
47
+
48
+ ```
49
+ # How to [Achieve Outcome] — [Primary Keyword]
50
+
51
+ ## Introduction (~100 words)
52
+ - What the reader will accomplish
53
+ - Prerequisites (what they need before starting)
54
+ - Estimated time
55
+
56
+ ## What You'll Need (~100 words)
57
+ - Tools, accounts, or materials
58
+ - Links to prerequisite resources
59
+
60
+ ## Step 1: [First Action] (~200 words)
61
+ - Clear instruction
62
+ - Screenshot or code snippet
63
+ - Expected result
64
+
65
+ ## Step 2: [Second Action] (~200 words)
66
+ - Clear instruction
67
+ - Common pitfall to avoid
68
+ - Expected result
69
+
70
+ ## Step 3: [Third Action] (~200 words)
71
+ - Clear instruction
72
+ - Pro tip or variation
73
+ - Expected result
74
+
75
+ ## Step 4: [Verification] (~150 words)
76
+ - How to confirm it worked
77
+ - What success looks like
78
+
79
+ ## Troubleshooting (~200 words)
80
+ ### [Common Issue 1]
81
+ - Symptom → Cause → Fix
82
+ ### [Common Issue 2]
83
+ - Symptom → Cause → Fix
84
+
85
+ ## Next Steps (~100 words)
86
+ - What to do after completing this tutorial
87
+ - Link to advanced guide
88
+ - CTA
89
+
90
+ ---
91
+ Target: 1,500-2,000 words | 4-6 steps | Schema: HowTo
92
+ ```
93
+
94
+ ## Pattern 3: Listicle
95
+
96
+ For "N best/top/ways" ranked or curated lists.
97
+
98
+ ```
99
+ # [N] [Best/Top/Essential] [Subject] for [Audience/Purpose]
100
+
101
+ ## Introduction (~150 words)
102
+ - Why this list matters
103
+ - Selection criteria (how items were chosen)
104
+ - Quick summary of top pick
105
+
106
+ ## 1. [Item Name] — [Key Differentiator] (~150-200 words)
107
+ - What it is / why it's included
108
+ - Key benefit or feature
109
+ - Best for: [specific use case]
110
+ - [Link or CTA]
111
+
112
+ ## 2. [Item Name] — [Key Differentiator] (~150-200 words)
113
+ - [Same structure]
114
+
115
+ ## 3. [Item Name] — [Key Differentiator] (~150-200 words)
116
+ - [Same structure]
117
+
118
+ ...
119
+
120
+ ## N. [Item Name] — [Key Differentiator] (~150-200 words)
121
+ - [Same structure]
122
+
123
+ ## Comparison Table (~100 words)
124
+ | Item | Key Feature | Best For | Price |
125
+ |------|-------------|----------|-------|
126
+
127
+ ## How to Choose (~150 words)
128
+ - Decision criteria
129
+ - Recommendation based on use case
130
+
131
+ ## Conclusion (~100 words)
132
+ - Top pick recap
133
+ - CTA
134
+
135
+ ---
136
+ Target: 1,000-1,800 words (depends on N) | N+3 H2 sections
137
+ ```
138
+
139
+ ## Pattern 4: FAQ / Q&A
140
+
141
+ For frequently asked questions and knowledge base content.
142
+
143
+ ```
144
+ # [Subject] FAQ: [N] Common Questions Answered
145
+
146
+ ## Introduction (~100 words)
147
+ - What this FAQ covers
148
+ - Who it's for
149
+
150
+ ### What is [subject]? (~100 words)
151
+ - Clear, concise definition
152
+ - Key characteristics
153
+
154
+ ### How does [subject] work? (~100 words)
155
+ - Simple explanation
156
+ - Core mechanism
157
+
158
+ ### How much does [subject] cost? (~100 words)
159
+ - Pricing information
160
+ - Value proposition
161
+
162
+ ### Is [subject] right for [audience]? (~100 words)
163
+ - Ideal use cases
164
+ - When to choose alternatives
165
+
166
+ ### How do I get started? (~100 words)
167
+ - First steps
168
+ - Link to getting started guide
169
+
170
+ ### [Additional question] (~100 words)
171
+ - Answer
172
+
173
+ ## Still Have Questions? (~50 words)
174
+ - Contact info or support link
175
+ - CTA
176
+
177
+ ---
178
+ Target: 800-1,200 words | 5-8 questions | Schema: FAQPage
179
+ ```
180
+
181
+ ## Outline Best Practices
182
+
183
+ 1. **Keyword placement:** Primary keyword in H1, secondary in 1-2 H2s
184
+ 2. **Section balance:** Each H2 section should be 150-300 words (not too short, not too long)
185
+ 3. **Internal links:** Plan 2-3 links during outline phase, not after
186
+ 4. **Schema alignment:** Choose the outline pattern that matches the target schema type
187
+ 5. **Reader flow:** Each section should lead naturally to the next
188
+ 6. **Standalone value:** Each H2 section should make sense if read in isolation (for featured snippets)
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * content_gen_inspect.mjs — Detects prerequisites for AI content generation.
4
+ *
5
+ * Usage:
6
+ * node skills/wp-content-generation/scripts/content_gen_inspect.mjs [--cwd=/path/to/project]
7
+ *
8
+ * Checks:
9
+ * 1. WP REST API access (WP_SITES_CONFIG) — required for publishing
10
+ * 2. GSC access — optional, enhances keyword research step
11
+ * 3. Existing content volume — for internal linking suggestions
12
+ * 4. Schema tools availability — for structured data step
13
+ */
14
+
15
+ import { readFileSync, existsSync } from 'fs';
16
+ import { resolve } from 'path';
17
+
18
+ const args = process.argv.slice(2);
19
+ const cwdFlag = args.find(a => a.startsWith('--cwd='));
20
+ const cwd = cwdFlag ? resolve(cwdFlag.split('=')[1]) : process.cwd();
21
+
22
+ const result = {
23
+ content_generation: {
24
+ ready: false,
25
+ capabilities: {
26
+ wp_rest_api: false,
27
+ gsc_keywords: false,
28
+ structured_data: false,
29
+ },
30
+ details: {},
31
+ },
32
+ };
33
+
34
+ // Check WP REST API access
35
+ const sitesConfig = process.env.WP_SITES_CONFIG;
36
+ if (sitesConfig) {
37
+ try {
38
+ const config = JSON.parse(sitesConfig);
39
+ const sites = Array.isArray(config) ? config : [config];
40
+ if (sites.length > 0) {
41
+ result.content_generation.capabilities.wp_rest_api = true;
42
+ result.content_generation.details.sites_count = sites.length;
43
+ result.content_generation.ready = true;
44
+
45
+ // Check for GSC credentials
46
+ const hasGsc = sites.some(s => s.gsc_credentials || s.gsc_service_account);
47
+ result.content_generation.capabilities.gsc_keywords = hasGsc;
48
+
49
+ // Structured data is available if REST API is available (sd_* tools use REST)
50
+ result.content_generation.capabilities.structured_data = true;
51
+ }
52
+ } catch {
53
+ result.content_generation.details.config_error = 'Invalid WP_SITES_CONFIG JSON';
54
+ }
55
+ }
56
+
57
+ // Pipeline steps availability
58
+ result.content_generation.pipeline = {
59
+ '1_brief': { available: true, note: 'Always available (Claude-native)' },
60
+ '2_keyword_research': {
61
+ available: result.content_generation.capabilities.gsc_keywords,
62
+ note: result.content_generation.capabilities.gsc_keywords
63
+ ? 'GSC available — real keyword data for research'
64
+ : 'GSC not configured — will use semantic keyword suggestions',
65
+ },
66
+ '3_outline': { available: true, note: 'Always available (Claude-native)' },
67
+ '4_draft': { available: true, note: 'Always available (Claude-native)' },
68
+ '5_seo_optimize': { available: true, note: 'Always available (Claude-native + wp-content-optimization)' },
69
+ '6_structured_data': {
70
+ available: result.content_generation.capabilities.structured_data,
71
+ note: result.content_generation.capabilities.structured_data
72
+ ? 'sd_* tools available via REST API'
73
+ : 'Requires WP REST API access',
74
+ },
75
+ '7_publish': {
76
+ available: result.content_generation.capabilities.wp_rest_api,
77
+ note: result.content_generation.capabilities.wp_rest_api
78
+ ? 'create_content available via REST API'
79
+ : 'Requires WP REST API access — can generate draft locally',
80
+ },
81
+ };
82
+
83
+ // Summary
84
+ if (!result.content_generation.ready) {
85
+ result.content_generation.details.note = 'WP REST API not configured. Can still generate content (Steps 1-5) but cannot publish or inject schema.';
86
+ } else {
87
+ result.content_generation.details.note = 'Full pipeline available. All 7 steps can execute.';
88
+ }
89
+
90
+ console.log(JSON.stringify(result, null, 2));
@@ -38,6 +38,7 @@ Content repurposing is the systematic transformation of canonical WordPress cont
38
38
  - "email" / "newsletter" / "digest" → Email newsletter (Section 2)
39
39
  - "atomize" / "break down" / "content calendar" → Content atomization (Section 3)
40
40
  - "character limits" / "platform specs" / "image sizes" → Platform specifications (Section 4)
41
+ - "auto-transform" / "automatic conversion" / "template pipeline" → Auto-Transform Pipeline (Section 5)
41
42
 
42
43
  2. **Run detection first:**
43
44
  ```bash
@@ -76,6 +77,14 @@ See `references/platform-specs.md`
76
77
  - Hashtag and link strategies
77
78
  - Posting frequency recommendations
78
79
 
80
+ ### Section 5: Auto-Transform Pipeline
81
+ See `references/auto-transform-pipeline.md`
82
+ - Automated blog post → multi-platform output
83
+ - Template system for consistent formatting
84
+ - Integration with LinkedIn (`li_create_post`), Twitter (`tw_create_tweet`, `tw_create_thread`), Buffer (`buf_create_update`), Mailchimp (`mc_set_campaign_content`)
85
+ - Platform-specific formatting rules and character limits
86
+ - See `references/transform-templates.md` for ready-to-use templates
87
+
79
88
  ## Reference Files
80
89
 
81
90
  | File | Content |
@@ -84,6 +93,8 @@ See `references/platform-specs.md`
84
93
  | `references/email-newsletter.md` | Newsletter digest, drip sequences, subject lines |
85
94
  | `references/content-atomization.md` | Atomization workflow, content calendar, repurposing matrix |
86
95
  | `references/platform-specs.md` | Character limits, image sizes, posting frequency |
96
+ | `references/auto-transform-pipeline.md` | Pipeline architecture: fetch → extract → template → output |
97
+ | `references/transform-templates.md` | Ready-to-use templates: blog→tweet, thread, LinkedIn, email |
87
98
 
88
99
  ## Recommended Agent
89
100
 
@@ -95,3 +106,5 @@ See `references/platform-specs.md`
95
106
  - **`wp-headless`** — headless content delivery for multi-channel architectures
96
107
  - **`wp-woocommerce`** — product content for e-commerce repurposing
97
108
  - **wp-social-email** — publish repurposed content to social and email channels
109
+ - **`wp-linkedin`** — direct LinkedIn publishing for transformed content
110
+ - **`wp-twitter`** — direct Twitter/X publishing for transformed content
@@ -0,0 +1,128 @@
1
+ # Auto-Transform Pipeline
2
+
3
+ ## Overview
4
+
5
+ The auto-transform pipeline converts WordPress content into platform-ready outputs with minimal manual intervention. It follows a 4-stage architecture: **Fetch → Extract → Template → Output**.
6
+
7
+ Each stage is composable — you can run the full pipeline for hands-free distribution or stop at any stage for review and manual adjustments.
8
+
9
+ ## Pipeline Flow
10
+
11
+ ```
12
+ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
13
+ │ FETCH │───▶│ EXTRACT │───▶│ TEMPLATE │───▶│ OUTPUT │
14
+ │ │ │ │ │ │ │ │
15
+ │ wp_get_ │ │ title │ │ platform │ │ li_* │
16
+ │ post │ │ excerpt │ │ rules │ │ tw_* │
17
+ │ wp_list_ │ │ headings │ │ char │ │ buf_* │
18
+ │ posts │ │ key pts │ │ limits │ │ mc_* │
19
+ │ │ │ image │ │ tone │ │ sg_* │
20
+ │ │ │ tags │ │ hashtags │ │ │
21
+ └──────────┘ └──────────┘ └──────────┘ └──────────┘
22
+ ```
23
+
24
+ ### Stage 1: Fetch
25
+
26
+ Retrieve source content from WordPress using REST tools.
27
+
28
+ | Tool | Use Case |
29
+ |------|----------|
30
+ | `wp_get_post` | Single post by ID |
31
+ | `wp_list_posts` | Recent posts for batch processing |
32
+ | `wp_get_page` | Static page content |
33
+ | `wc_get_product` | WooCommerce product for e-commerce social |
34
+
35
+ Extract from the response: `title.rendered`, `excerpt.rendered`, `content.rendered`, `featured_media`, `categories`, `tags`.
36
+
37
+ ### Stage 2: Extract
38
+
39
+ Parse the raw content into atomic elements for templating.
40
+
41
+ **Extraction rules:**
42
+ - **Title**: Strip HTML entities, keep under 100 chars
43
+ - **Excerpt**: First 2-3 sentences if no excerpt set, strip HTML
44
+ - **Headings**: All H2/H3 from content (used for thread splitting)
45
+ - **Key points**: Sentences containing numbers, statistics, or strong claims
46
+ - **Featured image**: Resolve `featured_media` ID to URL via `wp_get_media`
47
+ - **Tags**: Map to hashtags (lowercase, no spaces, `#` prefix)
48
+ - **Categories**: Use for tone/audience targeting
49
+
50
+ **Tag-to-hashtag conversion:**
51
+ ```
52
+ "Zero Calorie" → #zerocalorie
53
+ "Cactus Water" → #cactuswater
54
+ "Health Tips" → #healthtips
55
+ ```
56
+
57
+ ### Stage 3: Template
58
+
59
+ Apply platform-specific formatting rules from `transform-templates.md`.
60
+
61
+ **Template selection logic:**
62
+ | Target Platform | Content Length | Template |
63
+ |----------------|---------------|----------|
64
+ | Twitter/X | Short (< 5 key points) | Single tweet |
65
+ | Twitter/X | Long (≥ 5 key points or ≥ 3 H2s) | Thread |
66
+ | LinkedIn | Any | Feed post (default) or Article (if > 2000 words) |
67
+ | Buffer | Per-profile | Adapts to connected profiles |
68
+ | Email | Any | Snippet with CTA |
69
+
70
+ ### Stage 4: Output
71
+
72
+ Dispatch to distribution channels using MCP tools.
73
+
74
+ | Channel | Tool | Requires Confirmation |
75
+ |---------|------|-----------------------|
76
+ | LinkedIn post | `li_create_post` | No |
77
+ | LinkedIn article | `li_create_article` | Yes (safety hook) |
78
+ | Twitter single | `tw_create_tweet` | No |
79
+ | Twitter thread | `tw_create_thread` | No |
80
+ | Buffer queue | `buf_create_update` | No |
81
+ | Mailchimp campaign | `mc_create_campaign` + `mc_update_campaign_content` + `mc_send_campaign` | Yes (safety hook) |
82
+ | SendGrid email | `sg_send_email` | Yes (safety hook) |
83
+
84
+ ## Configuration
85
+
86
+ ### Batch Processing
87
+
88
+ For multi-post transforms (e.g., "repurpose the last 5 posts"):
89
+
90
+ 1. Fetch posts: `wp_list_posts` with `per_page=5`, `orderby=date`
91
+ 2. Loop: Extract → Template → Output per post
92
+ 3. For Buffer: space scheduling with `scheduled_at` (30-minute intervals)
93
+ 4. Report: Summary table with post title, channels, status
94
+
95
+ ### Tone Adaptation
96
+
97
+ | Platform | Tone | Adjustments |
98
+ |----------|------|-------------|
99
+ | Twitter/X | Casual, punchy | Short sentences, emojis OK, hook first |
100
+ | LinkedIn | Professional | Industry language, data-driven, insights |
101
+ | Email | Friendly, direct | Personal tone, clear CTA, benefit-focused |
102
+ | Buffer (multi) | Per-profile defaults | Adapts to connected platform |
103
+
104
+ ## Integration Points
105
+
106
+ This pipeline integrates with the distribution tools added in v2.10.0:
107
+
108
+ - **LinkedIn**: `li_create_post`, `li_create_article`, `li_get_analytics`
109
+ - **Twitter/X**: `tw_create_tweet`, `tw_create_thread`, `tw_get_metrics`
110
+ - **Buffer**: `buf_create_update`, `buf_get_analytics`
111
+ - **Mailchimp**: `mc_create_campaign`, `mc_update_campaign_content`, `mc_send_campaign`
112
+ - **SendGrid**: `sg_send_email`
113
+
114
+ Always check service availability before pipeline execution:
115
+ ```
116
+ hasLinkedIn() → li_* tools available
117
+ hasTwitter() → tw_* tools available
118
+ hasBuffer() → buf_* tools available
119
+ hasMailchimp() → mc_* tools available
120
+ hasSendGrid() → sg_* tools available
121
+ ```
122
+
123
+ ## Safety
124
+
125
+ - **Never auto-send** emails or campaigns — always require user confirmation
126
+ - **Preview before publish** — show formatted output before dispatching to any channel
127
+ - **Rate limiting** — respect platform API rate limits (Twitter: 300 tweets/3h, LinkedIn: 100 posts/day)
128
+ - **Duplicate detection** — check recent posts on platform before publishing identical content