WordPress Publishing
Publishing states
| Command | WordPress post_status | Guard |
|---|---|---|
scs wp draft --dry-run | — | No WordPress call |
scs wp draft | draft | Creates or updates a draft; refuses live-post downgrade |
scs wp publish pending | pending | Moves a draft to pending review |
scs wp publish 2026/12/31 | future | Schedules a publish date (QA gate required) |
scs wp publish now | publish | Publishes live now (QA gate required) |
scs wp status | reads current state | Updates the local publishing snapshot |
| WordPress approved workflow | (optional) | Visual review only; state changes are terminal-controlled |
Publishing state is now terminal-controlled: scs wp draft, scs wp publish now,
scs wp publish <date>, and scs wp publish pending. Live posts are never
converted back to draft. scs wp publish now and scheduled publishes require an
approved QA snapshot.
Payload mapping
| Source | WordPress |
|---|---|
title | post_title |
Article half (after <!-- scs:article -->) | post_content (Gutenberg blocks) |
publishing.slug | post_name |
publishing.wp_author_id | post author |
publishing.wp_category | category |
publishing.wp_tag | tags |
publishing.wp_content_format | content_format taxonomy |
publishing.wp_authority_topic | webboulder_authority_topic |
publishing.meta_title / meta_description | SEOPress metadata |
clusters.kc_type | ACF content_type |
keywords.keyword | ACF primary_keyword |
clusters.entity_coverage | ACF semantic_tags |
scs_pid | post meta idempotency key |
Review gate fields
| Field | Values |
|---|---|
wpw_review_status | not_reviewed, in_review, changes_requested, approved |
wpw_reviewer | WordPress user |
wpw_review_date | Ymd |
wpw_review_scope | factual, technical, editorial, ymyl, legal, accessibility |
wpw_review_checklist | accuracy, sources, originality, internal_links, metadata, schema, media, disclosure |
wpw_review_notes | Textarea |
scs qa pull snapshots these into publishing.csv as qa_status,
qa_reviewer, qa_date, qa_scope, qa_notes. WordPress remains
authoritative.
Status vocabulary
| WordPress | SCS snapshot |
|---|---|
not_reviewed | pending |
in_review | in_review |
changes_requested | changes_requested |
approved | approved |
| fields missing | not_configured |
Taxonomy rules
- Categories map to
wp_categoryand must exist in WordPress. - Tags come from
wp_tag(comma-separated). - Pillar pages are WordPress Pages; regular content is Posts.
content_formatis the article format taxonomy.- ACF
content_typeis hub / pillar / cluster / supporting, fromkc_type.
Safety
- Only the article half is sent; the brief stays local.
- A published post is never converted back to draft.
- A non-draft post SCS did not create needs
--force. - The draft is keyed by
scs_pid; title matching is not used. - Secrets stay in server config, never in Markdown or CSV.
Markdown that converts
Supported: headings, paragraphs, bold/italic/inline code, links, lists, tables,
fenced code, Mermaid, blockquotes, images, :::tip / :::note / :::warning,
and horizontal rules.
Use [anchor](pid:FS-0003) for internal links; SCS resolves the PID to the
published permalink.
Sitemap
SCS does not generate sitemap XML. SEOPress creates and serves it automatically
from published content, so drafts never appear and nothing is rebuilt after
scs publish.
curl -sSI https://example.com/sitemaps.xml | grep -iE 'HTTP/|content-type'
curl -sS https://example.com/post-sitemap1.xml | grep -F 'https://example.com/your-post/'
curl -sS https://example.com/robots.txt
wp option get seopress_xml_sitemap_option_name --format=json
/sitemaps.xml is the SEOPress index (plural); /sitemap.xml redirects to it.
Google's sitemap ping endpoint is retired — submit or check the sitemap in Search
Console instead. See XML Sitemaps.