Skip to main content

WordPress Publishing

Publishing states​

CommandWordPress post_statusGuard
scs wp draft --dry-run—No WordPress call
scs wp draftdraftCreates or updates a draft; refuses live-post downgrade
scs wp publish pendingpendingMoves a draft to pending review
scs wp publish 2026/12/31futureSchedules a publish date (QA gate required)
scs wp publish nowpublishPublishes live now (QA gate required)
scs wp statusreads current stateUpdates the local publishing snapshot
WordPress approved workflow(optional)Visual review only; state changes are terminal-controlled
note

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​

SourceWordPress
titlepost_title
Article half (after <!-- scs:article -->)post_content (Gutenberg blocks)
publishing.slugpost_name
publishing.wp_author_idpost author
publishing.wp_categorycategory
publishing.wp_tagtags
publishing.wp_content_formatcontent_format taxonomy
publishing.wp_authority_topicwebboulder_authority_topic
publishing.meta_title / meta_descriptionSEOPress metadata
clusters.kc_typeACF content_type
keywords.keywordACF primary_keyword
clusters.entity_coverageACF semantic_tags
scs_pidpost meta idempotency key

Review gate fields​

FieldValues
wpw_review_statusnot_reviewed, in_review, changes_requested, approved
wpw_reviewerWordPress user
wpw_review_dateYmd
wpw_review_scopefactual, technical, editorial, ymyl, legal, accessibility
wpw_review_checklistaccuracy, sources, originality, internal_links, metadata, schema, media, disclosure
wpw_review_notesTextarea

scs qa pull snapshots these into publishing.csv as qa_status, qa_reviewer, qa_date, qa_scope, qa_notes. WordPress remains authoritative.

Status vocabulary​

WordPressSCS snapshot
not_reviewedpending
in_reviewin_review
changes_requestedchanges_requested
approvedapproved
fields missingnot_configured

Taxonomy rules​

  • Categories map to wp_category and must exist in WordPress.
  • Tags come from wp_tag (comma-separated).
  • Pillar pages are WordPress Pages; regular content is Posts.
  • content_format is the article format taxonomy.
  • ACF content_type is hub / pillar / cluster / supporting, from kc_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.