Overview
Visual Portfolio uses a comprehensive control system to manage all settings for layouts, items, filters, and pagination. Controls are dynamically registered and organized into categories for better user experience.Control System Architecture
The control system is defined in/home/daytona/workspace/source/classes/class-controls.php and provides:
- Dynamic control registration
- Category organization
- Conditional display logic
- Style generation
- Value callbacks
- Sanitization
Default Control Arguments
Every control supports these base arguments (lines 49-130):Control Types
Text Controls
text - Single line text inputNumeric Controls
number - Numeric inputBoolean Controls
checkbox - Checkbox toggleSelection Controls
select - Dropdown selectionVisual Controls
color - Color pickerAdvanced Controls
code_editor - Code editor with syntax highlightingDisplay Controls
notice - Information noticeControl Categories
Controls are organized into categories for better UX. Common categories include:content-source- Content source selectioncontent-source-general- General content settingscontent-source-images- Image source settingscontent-source-post-based- Post query settingslayouts- Layout selection and optionsitems-style- Item styling optionsfilter- Filter settingssort- Sorting optionspagination- Pagination settingscustom_css- Custom CSS editor
Registering Categories
Conditional Display
Controls support sophisticated conditional logic:Supported Operators
==- Equals!==- Not equals>- Greater than<- Less than>=- Greater than or equal<=- Less than or equal
Multiple Conditions
All conditions in the array must be true (AND logic):Style Generation
Controls can automatically generate CSS:Multiple Styles
One control can generate multiple CSS rules:Value Callbacks
Use callbacks to provide dynamic values:AJAX Dynamic Controls
Dynamic controls automatically load via AJAX when dependencies change (line 136-187).Sanitization
Always sanitize user input:Common Sanitization Functions
Boolean String Fields
Some controls use string boolean values for dropdown options (lines 304-332):Registering Custom Controls
Basic Registration
Advanced Registration
Getting Control Values
Retrieve control values programmatically:Filtering Controls
Filter Control Registration
Filter Control Value
Filter Registered Controls
WPML Integration
Enable translation for string controls:Setup Wizard
Include controls in the setup wizard:Best Practices
- Naming Convention - Use descriptive names with underscores (e.g.,
items_gap,show_filter) - Default Values - Always provide sensible defaults
- Sanitization - Always sanitize user input with callbacks
- Conditions - Use conditions to show/hide related controls
- Categories - Organize controls into logical categories
- Descriptions - Provide helpful descriptions for complex controls
- Performance - Set
reload_iframeto false for non-visual controls - Validation - Validate min/max values for numeric inputs
- Accessibility - Use proper labels for screen readers
- Documentation - Comment complex control configurations
Common Patterns
Toggle with Related Controls
Layout-Specific Settings
Responsive Settings
Related
- Visual Editor - Using the visual editor interface
- Gutenberg Block - Block editor integration
- Shortcodes - Using shortcodes with settings