claude-plugin-wordpress-manager 2.9.1 → 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.
- package/CHANGELOG.md +73 -0
- package/agents/wp-content-strategist.md +58 -1
- package/agents/wp-distribution-manager.md +39 -6
- package/docs/plans/2026-03-01-tier6-7-design.md +246 -0
- package/docs/plans/2026-03-01-tier6-7-implementation.md +1629 -0
- package/hooks/hooks.json +18 -0
- package/package.json +6 -3
- package/servers/wp-rest-bridge/build/tools/index.js +9 -0
- package/servers/wp-rest-bridge/build/tools/linkedin.js +203 -0
- package/servers/wp-rest-bridge/build/tools/schema.js +159 -0
- package/servers/wp-rest-bridge/build/tools/twitter.js +183 -0
- package/servers/wp-rest-bridge/build/wordpress.js +94 -0
- package/skills/wordpress-router/references/decision-tree.md +10 -2
- package/skills/wp-content-generation/SKILL.md +128 -0
- package/skills/wp-content-generation/references/brief-templates.md +151 -0
- package/skills/wp-content-generation/references/generation-workflow.md +132 -0
- package/skills/wp-content-generation/references/outline-patterns.md +188 -0
- package/skills/wp-content-generation/scripts/content_gen_inspect.mjs +90 -0
- package/skills/wp-content-repurposing/SKILL.md +13 -0
- package/skills/wp-content-repurposing/references/auto-transform-pipeline.md +128 -0
- package/skills/wp-content-repurposing/references/transform-templates.md +304 -0
- package/skills/wp-linkedin/SKILL.md +96 -0
- package/skills/wp-linkedin/references/linkedin-analytics.md +58 -0
- package/skills/wp-linkedin/references/linkedin-posting.md +53 -0
- package/skills/wp-linkedin/references/linkedin-setup.md +59 -0
- package/skills/wp-linkedin/scripts/linkedin_inspect.mjs +55 -0
- package/skills/wp-structured-data/SKILL.md +94 -0
- package/skills/wp-structured-data/references/injection-patterns.md +160 -0
- package/skills/wp-structured-data/references/schema-types.md +127 -0
- package/skills/wp-structured-data/references/validation-guide.md +89 -0
- package/skills/wp-structured-data/scripts/schema_inspect.mjs +88 -0
- package/skills/wp-twitter/SKILL.md +101 -0
- package/skills/wp-twitter/references/twitter-analytics.md +60 -0
- package/skills/wp-twitter/references/twitter-posting.md +66 -0
- package/skills/wp-twitter/references/twitter-setup.md +62 -0
- 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
|