HTML Fields Library for WordPress
Final v4 release for building custom frameworks, settings systems, and admin UI.
Fluent API, 52 field types, legacy compatibility, and React/Vanilla integrations where needed.
Features • Installation • Quick Start • Architecture • Field Types • Demo Pages • Development • RU version
WP_Field v4 is the production-ready release of the modern field API. Use it for new integrations and for migrations away from ad-hoc legacy arrays. The modern layer gives you a typed, fluent field builder and a cleaner server-rendered integration model for WordPress forms.
This is not a WordPress-free browser runtime. Interactive fields still rely on core WordPress admin assets where that is the correct production integration.
- Modern API is the primary integration layer for new code.
- Legacy runtime is isolated in
vanilla/and remains available for compatibility. - Standalone vanilla export builds a separate installable plugin archive.
- Demo pages are split by purpose: legacy examples, modern field docs, and UI showcase.
- Map fields expose provider configuration through the public field API.
- Quality tooling is aligned across PHP, JS, and documentation updates.
- Fluent field builder through
WpField\Field\Field - 52 supported field types across simple, composite, layout, and WordPress-integrated controls
- Conditional logic with AND/OR relations
- Repeater and flexible content for nested data structures
- Containers for metaboxes, settings pages, taxonomies, and users
- Storage strategies for post meta, term meta, user meta, options, and custom tables
- React/Vanilla UI layer for admin shell, wizard, repeater, and flexible content flows
- Legacy compatibility layer for older integrations and unsupported custom field types
WP_Field has two layers:
- Modern API —
WpField\Field\Fieldand classes undersrc/Field/Types/ - Legacy compatibility layer —
WP_Field.phpandvanilla/
Use the modern API for new code. Keep the legacy layer for existing integrations, unsupported custom field types, or the standalone vanilla package.
- Create a field with
Field::make()or a typed shortcut. - Configure label, description, defaults, options, validation, and field-specific settings.
- Render the field inside a WordPress admin form.
- Save through a container or your own save flow.
- Pass the stored value back into the same field definition to render the saved state.
The modern layer still uses WordPress-provided functionality for these features:
wp.media/ Media Modal —media,image,file,gallery,backgroundwp-color-picker—color,palette, and color-based composite controlswp.editor— classic editor fieldswp.codeEditor— code editor fieldsjquery-ui-sortable—sortable,sorter,repeater,flexible_contentjquery-ui-datepicker— date and time UI where WordPress-native pickers are expecteddashiconsor another icon library —icon- provider-specific assets when a map provider requires them
Do not unload these assets on screens that render interactive fields unless you replace them with an equivalent setup.
composer require rwsite/wp-field- Copy the package into
wp-content/plugins/wp-field-plugin - Run
composer install --no-dev - Activate the plugin in WordPress admin
npm install
npm run buildYou can export the legacy runtime as a separate WordPress plugin that does not depend on the original woo2iiko plugin directory.
npm run build:standaloneThe build script:
- copies the minimal runtime from
vanilla/ - includes legacy assets and translations
- generates a dedicated plugin bootstrap
- writes the plugin to
dist/wp-field-vanilla/ - creates
dist/wp-field-vanilla.zip
The standalone package includes only the runtime required for the vanilla version:
wp-field-vanilla.phpREADME.txtvanilla/bootstrap.phpvanilla/WP_Field.phpvanilla/assets/css/wp-field.cssvanilla/assets/js/wp-field.jslang/wp-field.potlang/wp-field-ru_RU.polang/wp-field-ru_RU.molang/wp-field-ru_RU.l10n.php
It does not include the modern React layer, demo pages, tests, source SCSS, or repository-only development files.
use WpField\Container\MetaboxContainer;
use WpField\Field\Field;
$field = Field::text('email')
->label('Email Address')
->placeholder('user@example.com')
->required();
echo $field->render();
$metabox = new MetaboxContainer('product_details', [
'title' => 'Product Details',
'post_types' => ['product'],
]);
$metabox->addField(
Field::text('sku')->label('SKU')->required()
);
$metabox->addField(
Field::text('price')->label('Price')->required()
);
$metabox->register();Field::repeater('team_members')
->label('Team Members')
->fields([
Field::text('name')->label('Name')->required(),
Field::text('position')->label('Position'),
Field::make('email', 'email')->label('Email'),
])
->min(1)
->max(10)
->buttonLabel('Add Member')
->layout('table');Field::flexibleContent('page_sections')
->label('Page Sections')
->addLayout('text_block', 'Text Block', [
Field::text('heading')->label('Heading'),
Field::make('textarea', 'content')->label('Content'),
])
->addLayout('image_block', 'Image Block', [
Field::make('image', 'image')->label('Image'),
Field::text('caption')->label('Caption'),
])
->min(1)
->buttonLabel('Add Section');Field::make('map', 'location')
->label('Location')
->provider('google')
->apiKey('your-api-key')
->zoom(12)
->center(['lat' => 55.7558, 'lng' => 37.6173]);Containers integrate fields with WordPress screens and persistence:
MetaboxContainer— post meta and metaboxesSettingsContainer— settings pages and optionsTaxonomyContainer— taxonomy forms and term metaUserContainer— user profile forms and user meta
Storage strategies:
PostMetaStorageTermMetaStorageUserMetaStorageOptionStorageCustomTableStorage
textpasswordemailurltelnumberrangehiddentextarea
selectmultiselectradiocheckboxcheckbox_group
editormediaimagefilegallerycolordatetimedatetime-local
grouprepeater
switcherspinnerbutton_setsliderheadingsubheadingnoticecontentfieldset
accordiontabbedtypographyspacingdimensionsborderbackgroundlink_colorcolor_groupimage_select
code_editoriconmapsortablesorterpalettelinkbackup
date_time→datetime-localdatetime→datetime-localimagepicker→image_picker
In WordPress admin debug mode, the plugin registers demo pages under Tools:
- WP_Field Examples — legacy/classic API reference page
- WP_Field Components — modern field documentation and live examples
- Admin Shell UI Demo — UI showcase for the shell and wizard layer
Routes:
/wp-admin/tools.php?page=wp-field-examples/wp-admin/tools.php?page=wp-field-components/wp-admin/tools.php?page=wp-field-ui-demo
npm run dev
npm run lint
npm run buildnpm run dev starts Vite and watches vanilla/assets/scss/wp-field-examples-vanilla.scss to rebuild vanilla/assets/css/wp-field-examples-vanilla.css.
Edit SCSS sources under vanilla/assets/scss/. Do not edit generated CSS manually.
composer test
composer analyse
composer lint:check
./.agents/skills/qa-gate/scripts/verify.sh- The modern layer is not fully standalone in the browser.
- Removing WordPress admin runtime or required UI assets breaks interactive fields.
- Some interactions are intended only for backend screens.
- Demo pages are reference implementations, not a replacement for the normal plugin bootstrap in production.
See CHANGELOG.md for version history.
GPL v2 or later
Aleksei Tikhomirov (https://rwsite.ru)