A powerful and flexible developer-friendly custom fields plugin for Devflow CMF.
Devflow Custom Fields allows developers to build advanced content editing experiences using repeaters, flexible content layouts, conditional logic, media fields, appearance controls, and more.
Requires Devflow Version: 2.x
Tested Up To: 2.0.0
Requires PHP: 8.4+
Stable Tag: 1.0.1
License: GPLv2-only
- Text
- Textarea
- Rich Text (TinyMCE)
- Select
- Checkbox
- Radio
- Image
- Gallery
- oEmbed
- Help/Instruction Fields
- Repeaters
- Flexible Content Layouts
- 2 Column Containers
- 3 Column Containers
- Nested Layouts
- Nested Flexible Content
Show or hide fields dynamically based on values from other fields.
Supports:
- show/hide rules
- all/any logic
- nested field support
- Drag and drop image upload
- Gallery ordering
- Image preview modal
- Video/media embedding support
Per-field appearance settings:
- Width
- Label Color
- Input Field Background Color
- Text Color
- Border Radius
- Font Size
- Google Fonts
- CSS Class
- aria labels
- screen reader announcements
- keyboard navigation
- focus restoration
- accessible media controls
- accessible validation errors
Field::get('field_name', $id); // default context is `content`
Field::get('field_name', $id, 'product');
Field::get('field_name', $id, 'user');
Field::gallery('field_name', $id);
Field::images('field_name', $id); // the field must be an array
Field::rows('field_name', $id); // the field must be an array
Field::raw('field_name', $id); // must be top level attribute keyRepeaters save as arrays.
Example:
[
[
'title' => 'Row 1',
'description' => 'Example',
],
[
'title' => 'Row 2',
'description' => 'Example',
]
]- Start a new shell session.
- Navigate to the root of your install, run the following command
composer require getdevflow/custom-fields.
Field groups can be assigned to:
- Content
- Products
- Users
Flexible content stores layout metadata.
Example:
[
[
'_layout' => 'hero',
'_uuid' => 'uuid',
'heading' => 'Welcome',
'content' => 'Example',
],
[
'_layout' => 'gallery',
'_uuid' => 'uuid',
'images' => [],
]
]Image fields save JSON arrays.
Example:
[
'url' => 'https://example.com/uploads/image.jpg',
'name' => 'image.jpg',
'mime' => 'image/jpeg',
]Gallery fields save arrays of image objects.
Example:
[
[
'url' => 'https://example.com/uploads/image1.jpg',
],
[
'url' => 'https://example.com/uploads/image2.jpg',
]
]Conditional logic is configured per field.
Supports:
- equals
- not equals
- contains
- empty
- not empty
Example:
Show field if:
"layout" equals "hero"
Appearance settings are stored in:
style_settingsExample:
[
'width' => '50',
'label_color' => '#333333',
'input_background' => '#ffffff',
'text_color' => '#111111',
'border_radius' => '6px',
'font_size' => '16px',
'google_font' => 'Inter',
]Google Fonts can be selected from the Appearance section.
Fonts automatically load on render.
Navigate to:
Custom Fields > Import
Upload:
- single field group export
- bundle export
Supported schema versions:
devflow-custom-fields.v1
devflow-custom-fields.bundle.v1
Field groups can be exported individually or in bulk.
Exports are JSON files.
Use the Clone action from the field group table.
Cloning duplicates:
- fields
- layouts
- validation
- appearance settings
- conditional logic
- Use flexible content for page builders
- Use repeaters for collections
- Use layouts for structured content
- Use conditional logic to simplify interfaces
Very large nested flexible content structures may impact browser performance.
Recommended:
- collapse unused sections
- split large groups
- avoid deeply nested repeaters where possible
Future improvements may include:
- field tabs/groups
- advanced display settings
- reusable field presets
- field templates
- live previews



