[{"data":1,"prerenderedAt":47},["ShallowReactive",2],{"\u002Fapi\u002Fpage\u002Fskills\u002Fsumi-wordpress\u002Fwp-native-features":3,"PageBody_Mt3DL028asl7fYHQpVsqcsCVVCfoOvuqSuhIxxifQA":39},{"title":4,"description":5,"plugin":6,"kind":7,"references":8,"source":9,"heading":10,"toc":11,"locale":38},"wp-native-features","Building site features with WordPress core APIs instead of plugins — custom post types and taxonomies exposed to the block editor, post meta with native meta boxes or register_post_meta, Settings API pages for site-wide options, JSON-LD schema, inline SVG icon helpers, safe uploads, contact forms with clean markup, i18n with Polylang, and security fundamentals. Use when adding content types, fields, options pages, structured data, forms or integrations (e.g. WhatsApp links) to a native block theme, or when tempted to install a plugin for something core can do.","sumi-wordpress","skill",0,"plugins\u002Fsumi-wordpress\u002Fskills\u002Fwp-native-features\u002FSKILL.md","Native Features (core APIs over plugins)",[12,15,18,21,24,27,30,32,35],{"id":13,"text":14},"content-model","Content model",{"id":16,"text":17},"site-wide-options","Site-wide options",{"id":19,"text":20},"integrations-as-helpers","Integrations as helpers",{"id":22,"text":23},"icons-and-media","Icons and media",{"id":25,"text":26},"structured-data","Structured data",{"id":28,"text":29},"forms","Forms",{"id":31,"text":31},"i18n",{"id":33,"text":34},"security-baseline","Security baseline",{"id":36,"text":37},"done-checklist","Done checklist","en",["Island",40],{"key":41,"result":42},"PageBody_Mt3DL028asl7fYHQpVsqcsCVVCfoOvuqSuhIxxifQA",{"head":43},{"style":44},[45],{"innerHTML":46},".prose[data-v-1545ba8e]{max-width:var(--measure-prose)}.prose[data-v-1545ba8e] h2{margin-block:var(--space-8) var(--space-4)}.prose[data-v-1545ba8e] h3{margin-block:var(--space-6) var(--space-3)}.prose[data-v-1545ba8e] h4{margin-block:var(--space-5) var(--space-3);font-family:var(--font-mono);font-variation-settings:\"wdth\" var(--mono-width-label);font-size:var(--text-small);text-transform:uppercase;letter-spacing:var(--text-label-ls);color:var(--color-text-muted)}.prose[data-v-1545ba8e] ol,.prose[data-v-1545ba8e] p,.prose[data-v-1545ba8e] ul{margin-block-end:var(--space-4)}.prose[data-v-1545ba8e] li{margin-block-end:var(--space-2)}.prose[data-v-1545ba8e] ol,.prose[data-v-1545ba8e] ul{padding-inline-start:var(--space-5)}.prose[data-v-1545ba8e] li:has(.task-box){list-style:none}.prose[data-v-1545ba8e] .task-box{width:.8em;height:.8em;border:var(--border-width) solid var(--color-border);vertical-align:baseline;margin-inline-end:var(--space-2);display:inline-block}.prose[data-v-1545ba8e] code{padding:1px var(--space-1);background:var(--color-surface-sunk);border:var(--border-width) solid var(--color-border)}.prose[data-v-1545ba8e] pre{padding:var(--space-4);background:var(--color-surface-sunk);border:var(--border-width) solid var(--color-border);margin-block-end:var(--space-5);overflow-x:auto}.prose[data-v-1545ba8e] pre code{background:0 0;border:0;padding:0}.prose[data-v-1545ba8e] .table-scroll{max-width:none;margin-block-end:var(--space-5);overflow-x:auto}.prose[data-v-1545ba8e] table{border-collapse:collapse;width:100%;min-width:32rem;font-size:var(--text-small);line-height:var(--text-small-lh)}.prose[data-v-1545ba8e] td,.prose[data-v-1545ba8e] th{padding:var(--space-3) var(--space-4);text-align:start;vertical-align:top;border-block-start:var(--divider-width) solid var(--color-divider)}.prose[data-v-1545ba8e] th{font-family:var(--font-mono);font-variation-settings:\"wdth\" var(--mono-width-label);font-size:var(--text-label);letter-spacing:var(--text-label-ls);text-transform:uppercase;color:var(--color-text-muted);border-block-end:var(--border-width) solid var(--color-border)}.prose[data-v-1545ba8e] blockquote{margin:0 0 var(--space-5);border-inline-start:var(--seam-width) solid var(--color-seam);color:var(--color-text-muted);padding-inline-start:var(--space-4)}.prose[data-v-1545ba8e] hr{margin-block:var(--space-7);border:0;border-block-start:var(--divider-width) solid var(--color-divider)}.prose[data-v-1545ba8e] pre,.prose[data-v-1545ba8e] table{max-width:none}",1791464219430]