⌘K

Content Model Reference

The conceptual overview of Articles/Pages/Projects lives in Understanding Content Types — this page is the field-by-field schema, for theme and plugin code that reads $item directly or works with sl_load_index()/sl_load_item() (see Data Layer).

Common fields

Present in both the lightweight index (_index.json) and the full item file:

FieldTypeNotes
slugstringAuto-generated from the title
custom_slugstringManual override — sl_effective_slug($item) returns whichever is set
titlestring
datestringY-m-d or Y-m-d H:i
categorystringA single category slug, or empty
tagsarrayTag slugs
imagestringRelative path, e.g. files/photo.jpg
image_altstringAlt text for the featured image
author_idstringOwning user account's ID
show_in_menuboolInclude in the auto-generated menu
menu_orderint0–999, used by manual menu sort
statusstringpublished, draft, scheduled, unpublished — see below
publish_atstringScheduled publish datetime; empty when not scheduled
show_dateboolDisplay toggle for the publish date

Full item file only

FieldTypeNotes
contentstringRaw HTML or Markdown source — never display without render_content_html()
content_formatstringhtml (default) or markdown
last_modifiedstringUpdated on every save
meta_title, meta_description, meta_keywordsstringSEO overrides
canonical_urlstringManual canonical override
schema_typestringJSON-LD schema.org type override
og_title, og_description, og_imagestringOpen Graph overrides — can differ from the meta/featured-image equivalents
show_title, show_featured_imageboolDisplay toggles
galleriesarrayNamed inline galleries — see Image Galleries
custom_fieldsobjectKeyed by field key — see Custom Fields
show_related_itemsboolSee Related Content
related_itemsarray[{type, slug}, …] — empty array means auto mode

Per-type extra fields

TypeExtra fields
Articlesummary, show_on_homepage
Projectdescription, show_on_homepage
Pagepage_template

status values

ValueMeaning
publishedLive on the front end
draftNever published, or explicitly saved as a draft
scheduledHas a future publish_atsl_promote_scheduled() flips it to published automatically once that time passes, on the next front-end request
unpublishedWas published, then explicitly taken down (the Unpublish action) — distinct from draft so its history and public link stay intact

Where these fields come from

sl_admin_index_fields(string $type): array (core/admin-data-layer.php) is the authoritative list of what goes into the index for a given type — the common fields above plus that type's extras. If you're adding a plugin filter on item_before_save (see Filters) and need a value available in list views without loading the full item, it needs to be in that function's return array, not just on the full item.