wp-editor-components
Build or migrate WordPress editor and plugin React interfaces using public @wordpress/components APIs. Covers dependency handles, accessible controlled controls, WordPress 7.1 40px form-control defaul
SKILL.mdwordpress/wp-editor-components/SKILL.md
GitHubWordPress Editor Components
Use public WordPress components for editor/admin application UI, but keep form state, persistence, authorization, and errors in your own explicit data flow. Component visibility and disabled state are never server-side access control.
Load the package correctly
When using @wordpress/scripts, import packages normally and consume the
generated .asset.php file so wp-components, wp-element, wp-i18n, and
other dependencies are declared automatically. Do not bundle a second React or
reach through window.wp.components private properties to bypass the build.
Load component CSS in the target document. WordPress 7.1's post-editor canvas
is always iframed, so distinguish shell components from block content styles.
If custom UI uses @wordpress/theme or --wpds-* tokens, declare the matching
wp-theme script/style dependency; the two registries are independent.
Build accessible controlled controls
import { TextControl } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
<TextControl
label={ __( 'API label', 'acme' ) }
value={ label }
onChange={ setLabel }
help={ error || __( 'Shown to editors.', 'acme' ) }
/>;
Keep a stable controlled value and provide real labels, help/error association, keyboard behavior, focus restoration, and loading feedback. Do not scrape a component's generated DOM, class names, or Emotion identifiers. Use documented props and composition.
WordPress 7.1 form-control sizing
Affected form controls now use a 40px default unconditionally. Remove
__next40pxDefaultSize; it has no runtime effect, and false does not restore
36px. On BorderBoxControl, BorderControl, FontSizePicker, and
ToggleGroupControl, the old size prop is also deprecated and ineffective.
This rollout does not include Button; do not mechanically remove a Button
opt-in without checking its current contract. Audit surrounding fixed heights,
grid rows, modal footers, and custom CSS instead of forcing old internal
dimensions back onto the component.
Removed and changed APIs
Navigationand its subcomponents were removed in 7.1. Migrate navigation state and screens toNavigator; it is not a one-name import replacement.__experimentalApplyValueToSideswas removed. KeepBoxControl, but move side-value transformation into plugin-owned data logic.Viewstill acceptscssfor type compatibility, but the prop is a no-op. UsestyleorclassName.Divider,Surface,Truncate,View,Flex, andSpacerare among the components moving away from Emotion implementation details. If using Emotioncx()/css(), compose order-dependent fragments in onecss()call beforecx(); preferably use scoped classes.
Read references/wp-71-migration-matrix.md for the affected controls and
before/after checks.
Design-system boundary
Prefer a WordPress component over styling low-level tokens directly. For a
plugin-owned themed application subtree, public ThemeProvider can set primary
and background seed colors, cursor behavior, and corner radius. Render at most
one isRoot provider per document, accept only valid opaque colors, and verify
actual contrast; the generated palette cannot guarantee every combination.
Do not globally restyle core editor controls from plugin CSS. Scope any plugin-specific surface and test it with admin color schemes, RTL, high contrast, zoom, and narrow viewports.
Migration workflow
- Search imports/JSX for removed, deprecated,
__experimental,__unstable,css, generated-class, and fixed-height dependencies. - Confirm the installed WordPress package version and public documentation.
- Migrate one behavior at a time; do not silence console warnings with aliases.
- Rebuild dependency metadata and verify the script/style handles.
- Test keyboard, focus, screen reader naming, errors, loading, RTL, zoom, and both Post/Site Editor contexts.
- Test the oldest supported WordPress or feature-detect an optional export.
Security and performance
- Re-check permissions and sanitize writes at REST/Ajax handlers.
- Never render untrusted HTML through component escape hatches.
- Debounce deliberate search, cancel stale requests, and avoid a request on every uncontrolled render.
- Keep selectors stable and subscriptions narrow; memoize only after measuring.
- Treat experimental APIs as unstable even when they happen to exist in Core.
- React 19 did not ship in WordPress 7.1; do not code against that experiment as the Core runtime contract.
Related skills
wp-dataviews-dataformfor dataset and form abstractions.wp-block-editor-iframe-compatibilityfor canvas/shell document boundaries.wp-plugin-assets-loadingfor handles, generated metadata, andwp-theme.
References
- Read
references/wp-71-migration-matrix.mdfor the per-component removal/replacement matrix. - Editor components updates in WordPress 7.1: https://make.wordpress.org/core/2026/07/23/editor-components-updates-in-wordpress-7-1/
- Design system theming in WordPress 7.1: https://make.wordpress.org/core/2026/07/31/design-system-theming-in-wordpress-7-1/
- Miscellaneous block editor changes in WordPress 7.1: https://make.wordpress.org/core/2026/08/04/miscellaneous-block-editor-changes-in-wordpress-7-1/
- WordPress 7.1 Field Guide: https://make.wordpress.org/core/2026/08/05/wordpress-7-1-field-guide/