All notable changes to OpenFields will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- i18n: Complete POT file — POT now includes all 373 translatable strings (PHP + JS), up from 154 (PHP-only). Fixed by increasing PHP memory limit for WP-CLI JS parser.
- i18n: Unwrapped strings — Wrapped 30+ remaining hardcoded strings in field settings (descriptions, placeholders, loading states) with
__().
pnpm i18n:pot— Regenerate the POT file (PHP + JS) in one commandpnpm i18n:audit— Scan source files for potentially unwrapped stringspnpm i18n:audit:strict— Same audit, exits 1 on findings (CI mode)- New animated plugin logo as WordPress.org icon
- Plugin icon updated on WordPress.org (extracted from animated logo)
- REST API
/search/usersand/options/rolesendpoints now requirelist_userscapability instead ofedit_posts - Added
current_user_can( 'edit_term' )capability check to taxonomy field save handler - All bare
echoternary output wrapped inesc_attr()for consistent escaping discipline
- BREAKING: Plugin prefix renamed from
cof(3 chars) tocofld(5 chars) per WordPress.org prefix length guidelines- All PHP constants:
COF_*→COFLD_* - All PHP classes:
COF_*→COFLD_* - All PHP functions:
cof_*()→cofld_*() - All CSS classes:
.cof-*→.cofld-* - All JS variables:
cofConfig→cofldConfig,cofMetaBox→cofldMetaBox,openfieldsAdmin→cofldAdmin - Database tables:
cof_fieldsets→cofld_fieldsets,cof_fields→cofld_fields,cof_locations→cofld_locations - PHP file names:
class-cof-*.php→class-cofld-*.php
- All PHP constants:
- Source code & build instructions section in readme.txt for compressed JS/CSS assets
check_list_users_permission()REST API method for user-data endpoints
- Page templates not fetched (GitHub #1) — now dynamically scans all public post types and block theme templates
- Template matching failure when default template is selected (value mismatch between
get_page_template_slug()returning''and rules storing'default') - Fields not saving when fieldsets have template, category, or post format location rules (missing context in
save_post()) - Admin interface failed to load any data — localized script variable name mismatch (
cofAdmin→openfieldsAdmin) - Invalid menu icon (
dashicons-formsdoes not exist, replaced withdashicons-editor-table) - Meta box script localization targeting non-existent
cof-meta-boxhandle (changed tocof-fields) - Term and user default value logic overriding intentional
0/empty values (now usesmetadata_exists()) - Admin mount point ID mismatch between PHP (
cof-admin) and React (openfields-admin) - TypeScript type error in ConditionalLogicPanel (field ID to string conversion)
- Deprecated
get_openfields()reference removed from documentation
- Dynamic page template options in location rule builder (fetched from WordPress instead of hardcoded)
- Post Category and Post Format location rule types in admin UI
- Categories, post formats, and page templates provided to admin via localized data
- Plugin text domain loading for translation support
- Activation redirect transient for first-time setup experience
- Switch field renderer include (was missing)
- GitHub Actions workflow for automated releases
- Comprehensive documentation index with cross-linked navigation
- Removed unnecessary
flush_rewrite_rules()on activation/deactivation - Removed phantom scheduled hook cleanup for non-existent cron event
- Completely redesigned README for user-friendliness
- Simplified and reorganized CONTRIBUTING.md
- Improved documentation discoverability with INDEX.md
- ✨ Visual field builder with drag-and-drop interface
- 📋 Core field types (text, textarea, select, radio, checkbox, switch, repeater, group, etc.)
- 🎯 Conditional logic system with field ID-based references
- 📍 Location rules for post types, taxonomies, and user roles
- 🎨 Custom CSS per fieldset
- 📤 Import/Export fieldsets as JSON
- 🔌 REST API endpoints for headless usage
- 📱 Responsive admin interface built with React 18 + TypeScript
- 🧪 Field copy/paste functionality
- WordPress plugin with PSR-4 autoloading
- Custom database tables for fieldsets and fields
- Automatic meta storage routing (post/user/term meta)
- Full REST API with proper authentication
- WordPress.org compliant code structure
- React 18 + TypeScript with Vite
- shadcn/ui components and Tailwind CSS
- Zustand state management
- @dnd-kit for drag-and-drop functionality
- Hot reload development experience
- Comprehensive developer guide
- Architecture reference
- Build system documentation
- WordPress compliance guidelines
- Quick reference for common tasks
To create a new release:
-
Update version in
package.json:pnpm version patch # or minor, major -
Build the release:
pnpm run build:plugin:release
-
Create a git tag:
git tag v$(node -p "require('./package.json').version") -
Push to GitHub:
git push origin main --tags
GitHub Actions will automatically:
- Build the plugin
- Create a release on GitHub
- Upload the ZIP file for download
See BUILD.md for detailed build instructions.
- Advanced field types (WYSIWYG, Color Picker, Date/Time)
- Field validation rules
- Performance optimizations
- CLI commands for scaffolding
- Enhanced repeater and flexible content
- Custom field type builder UI
- GraphQL support
- Block editor integration
- Field template library
- Download from Releases
- Upload ZIP to WordPress admin → Plugins → Add New → Upload Plugin
- Activate the plugin
git clone https://github.com/novincode/openfields.git
cd openfields
pnpm install
pnpm run wp-env:start
pnpm run dev- 📖 See README.md for overview
- 🤝 See CONTRIBUTING.md for how to contribute
- 📚 See Documentation Index for all docs
- 🐛 Report issues on GitHub Issues
- 💬 Ask questions in GitHub Discussions
OpenFields is licensed under GPL v2 or later. See LICENSE for details.
Made with ❤️ by the OpenFields team