Skip to main content
Visual Portfolio allows you to create custom layouts by registering them through the vpf_extend_layouts filter. This guide covers the complete process of creating a custom layout from registration to implementation.

Layout Registration

Layouts are registered using the vpf_extend_layouts filter hook. Location: classes/class-get-portfolio.php:90

Basic Layout Registration

Layout Structure

Built-in Layouts

Visual Portfolio includes five default layouts. You can study these as examples. Location: classes/class-admin.php:323-444

Tiles Layout

Masonry Layout

Grid Layout

Justified Layout

Slider Layout

Control Types

Controls define the settings available in the layout editor.

Text Control

Number / Range Control

Select Control

Checkbox Control

Radio Control

Color Control

Conditional Display

Complete Custom Layout Example

1. Register Layout

2. Add JavaScript Handler

3. Add Data Attributes Filter

4. Add Styles

5. Enqueue Assets

Extending Existing Layouts

Add controls to existing layouts:
Location: classes/class-get-portfolio.php:102

Layout-Specific Templates

Create custom templates for your layout:

Accessing Layout Options

Access layout options in your code:

Best Practices

  1. Unique naming - Prefix control names with layout name: carousel_autoplay
  2. Provide defaults - Always set sensible default values
  3. Add descriptions - Help users understand settings
  4. Use conditions - Show/hide controls based on other settings
  5. Validate values - Check min/max ranges and data types
  6. Mobile responsive - Test layout on all screen sizes
  7. Performance - Optimize JavaScript for smooth animations
  8. Accessibility - Add proper ARIA labels and keyboard navigation
  9. Documentation - Document custom layout usage

Debugging

Log layout options during development:

Common Issues

Controls Not Showing

Ensure filter priority is correct and layout is properly registered:

JavaScript Not Loading

Check that assets are enqueued when layout is active:

Styles Not Applying

Verify correct CSS selectors: