Visual Portfolio


Visual Portfolio let you create beautiful portfolio layouts. Generates shortcode to show portfolio or any custom post types using Masonry, Justified, Tiles or Carousel layouts.



  • Visual preview for portfolio layouts shortcode builder
  • Templates for theme developers
  • 4 predefined layouts:
    • Masonry
    • Justified (Flickr)
    • Tiles
    • Slider (+ Carousel, Coverflow)
  • 3 predefined hover effects:
    • Fade
    • Emerge
    • Fly
    • Default (no hover effect)
  • Infinite Scroll
  • Load More
  • Paged layouts
  • Filtering
  • Popup gallery (YouTube and Vimeo supported)
  • Custom item gutters
  • Stretch option (if you want to break the fixed container of the page)
  • Custom image sets
  • Custom posts type layouts (not only portfolio)
    • Posts by type
    • Posts by specific ID
    • Posts by taxonomies
    • Custom order
  • Custom CSS for each portfolio layouts
  • Shortcode generated, so you can place unlimited portfolio layouts on the page
  • Gutenberg WordPress builder supported
  • WPBakery Page Builder page builder supported

Real Examples


  • Visual Portfolio builder p.1
  • Visual Portfolio builder p.2 (custom images set)
  • Visual Portfolio builder p.3 (custom styles)
  • Portfolio items admin
  • Visual Portfolio layouts admin
  • Example: Tiles + Stretch
  • Example: Justified Gallery (Flickr)
  • Example: Masonry + Posts
  • Example: Carousel and Coverflow
  • Example: Tiles + Custom hover color
  • Example: Tiles + Paged pagination
  • Example: Masonry
  • Example: Tiles + Popup gallery
  • Example: Popup Gallery


Automatic installation

Automatic installation is the easiest option as WordPress handles the file transfers itself and you don’t need to leave your web browser. To do an automatic install of Visual Portfolio, log in to your WordPress dashboard, navigate to the Plugins menu and click Add New.

In the search field type “Visual Portfolio” and click Search Plugins. Once you’ve found our plugin you can view details about it such as the point release, rating and description. Most importantly of course, you can install it by simply clicking “Install Now”.

Manual installation

The manual installation method involves downloading our Visual Portfolio plugin and uploading it to your webserver via your favourite FTP application. The WordPress codex contains instructions on how to do this here.


Has potential…

This plugin definitely has potential.
Judging from the demos shown on their website.

Unfortunately it appears to suffer from the Gutenberg editor that is being pushed into the WordPress universe. I could not get the plugin to work with the Gutenberg plugin enabled in WP 4.9.8 or the Wp 5.0 Beta.

If I were the creator of the plugin, I would sit tight until about three months after WP 5 has been released and the first updates (read: bug fixes) have been implemented.

UPDATE: please read the entire thread, plugin works as expected.

Great Plugin

Thank you for this wunderful plugin. I works great.
I like the possibilities of customization.

Excellent plugin

Good work! I have a small issue on mobile because there is no ”Load more -button”. On desktop there is 20 pictures but I can see only 10 on mobile. Is there some settings that causes this issue?

Amazing Portfolio

It is hard to believe this portfolio is free. Its functionality is better than the functionality of many premium portfolios out there. It has 4 types of grids, it can filter posts, it can easily create image galleries, it has 3 types of pagination and many more features. I also checked the developer’s themes and they are amazing. Very high-quality products.

Read all 24 reviews

Contributors & Developers

“Visual Portfolio” is open source software. The following people have contributed to this plugin.


Translate “Visual Portfolio” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



Note: Don’t forget to clear cache after plugin update. Changed portfolios with pagination enabled, so it may be broken.

  • added “Mousewheel Control” option in Slider
  • added fade-in transition for lazyloaded images
  • added automatic fill title and description fields when new images added in Images Content Source
  • added gutenberg block transform from shortcode
  • updated vendor plugins
  • fixed carousel position on first load (mostly on mobile devices)
  • fixed portfolio with custom taxonomies in post based + OR relation and filter active
  • fixed paged portfolios load on single posts and in archives. Now uses own get variable ‘vp_page’


  • added wp actions in registering controls and metaboxes
  • updated Conditionize script


  • fixed Click Action Target default value


  • added lazyload preloader placeholder animation
  • added Target option for Click Action URL
  • added ghostkitSR support in Gutenberg block (animate on scroll functionality)
  • added condition to show meta block in templates (less html if disabled showing meta data)
  • added possibility to resize custom CSS Editor
  • added Menu Order in post based source
  • added Mask property in control styles (for developers)
  • added filters to extend default controls for layouts, items styles, filters and paginations
  • added filter for control arguments vpf_print_layout_control_args (developers may change controls settings in layouts editor)
  • changed condition script for settings in layout editor, should improve performance
  • changed popup gallery z-index to 1500 (like in WooCommerce)
  • changed initialization method to Mutation Observers (portfolio will init automatically after ajax load)
  • removed wp_unslash from custom CSS code save (because some specific styles removed)
  • prevent session start in admin pages (this only needs in paged with random order)
  • fixed default sorting of selected/excluded posts and taxonomies in post based content source
  • fixed content source images disappear when in image meta added ” symbol
  • fixed layouts fetch error in Gutenberg 4.2
  • fixed flex-wrap in fade style
  • fixed lazyload images in IE11
  • fixed popup gallery in IE11
  • fixed validation error when trying to use URLs like “/something” in content source images
  • minor changes


  • added link to Documentation in admin menu
  • added vpf_extend_tiles filter
  • fixed custom jquery events triggering


  • fixed categories show in filter
  • fixed fade and fly items flex-wrap


  • added support for Gutenberg 3.7.0
  • added setting for custom taxonomies to show in portfolio filter
  • added support for WooCommerce categories in portfolio filter
  • added settings for the title and description popup gallery caption
  • added Read More button option for Default Items Style
  • added dropdown in top admin menu with the list of available portfolios on this page
  • added generation placeholders on the fly (no more need to regenerate thumbnails to get placeholder)
  • fixed popup image title color (were dark)
  • fixed popup video play after going to the next slide


  • added options for texts in filter and pagination
  • fixed paged /portfolio/ page (
  • fixed vertical images quality
  • fixed conflict with Jetpack lazy
  • fixed filter shortcode output


  • fixed font-awesome dependency


  • added portfolio preview iframe in Gutenberg block
  • changed portfolio default image sizes (since we use Lazyload, we can use larger image sizes)
  • updated FontAwesome to 5.2.0
  • fixed Slider styles when used 2 sliders on the page
  • removed imagesloaded dependelcy
  • disabled ‘with_front’ in portfolio post type (thanks to


  • additional check for isotope and fjGallery existence
  • added init outside of ‘ready’ event (possible faster initialization)
  • fixed lazyload possible conflict with the 3rd-party themes/plugins


  • fixed validator error “The sizes attribute may be specified only if the srcset attribute is also present”


  • NOTE: strongly recommend to regenerate thumbnails on your site using this plugin
  • added lazy loading for images
  • added will-change styles in templates (animations should work smoother)
  • added new Tiles
  • added pagination paged arrows options
  • added align wide and full options in Gutenberg block
  • added support for custom controls styles (developers could create their own controls and add custom styles). Read FAQ for more information
  • added custom control options in filter templates (helpful for developers)
  • added pagination style and possibility to extend it from 3rd-party code
  • added portfolio item comments number data for templates
  • added ‘resized’ event for developers
  • always enqueued main style on all pages
  • changed carousel arrows shadow
  • fixed validation errors (added space between data attributes)
  • fixed video popup position
  • fixed portfolio bugged reload in preview
  • renamed nk-spinner to vp-spinner
  • removed double slash in custom theme template styles urls
  • removed imagesloaded usage


  • added Slider (+ Carousel, Coverflow) layout
  • added capabilities check when generated preview page
  • improved responsive calculation algorithm
  • disabled preview page caching by some popular caching plugins
  • fixed isotope newly loaded items jumping
  • fixed conditions usage on controls in 3rd-party extensions
  • fixed PHP notices when trying to extend portfolio options
  • fixed Data source selected item (was always Post selected)
  • fixed Default filter show
  • fixed Date format control UI
  • fixed confirmation message when leaving layouts editor without change


  • added check for template existance before include it (to prevent errors when 3rd-party devs don’t added templates)
  • fixed random order duplicates when used pagination
  • fixed errors in PHP < 5.5
  • disabled Infinite Load pagination in the Portfolio preview
  • changed templates inclusion to support 3rd-party extensions
  • removed background color from the load button when loading or no items
  • renamed all events prefix from vp to vpf


  • prepared code for extending from 3rd-party developers
  • fixed saving unchecked toggle values in Layouts editor (Show title, Show categories, etc…)


  • added filters to disable enqueued frontend plugins (see FAQ section)
  • added Custom URL option to custom images set
  • added support for negative number of items per page for custom images set (to show all available items on the page)
  • fixed custom images show when disabled pagination
  • fixed custom images filters count show


  • added Justified layout
  • added custom user images support in Content Source settings
  • added Gutenberg block to easily insert layouts
  • added Random order in Post-Based content source
  • added spinner to load more button
  • added setting to change portfolio slug
  • fixed video playing when popup were closed
  • fixed filter in post-based with taxonomies selected
  • fixed w3c validation error when enqueuing template styles
  • fixed specific posts selector ajax result
  • fixed publish button click (don’t show confirm alert)
  • changed “No More” button text
  • changed active filter buttons background color
  • updated FontAwesome to 5 version
  • minor changes


  • improved CSS editor (added autocomplete hints; selectors hint; showing errors; preventing save when editor has errors)
  • improved layouts editor interface
  • added shortcode for portfolio filter (you can use filter outside of portfolio wrapper)
  • added possibility to change date format
  • added frontend WPBakery Page Builder support
  • added support for post ordering plugins (Intuitive Custom Post Order)
  • fixed popup video jumping
  • fixed some php errors in preview
  • fixed photoswipe duplicates if on the page > 1 visual portfolio with popup gallery
  • fixed permalinks flush on activation and deactivation


  • fixed video format conflict with theme formats
  • fixed php error about undefined index
  • fixed buttons hover border issue in default themes


  • added support for oEmbed videos (YouTube and Vimeo supported)
  • added settings for popup gallery
  • added share button in popup gallery
  • added “Edit Portfolio Item” button in admin menu on frontend
  • added option to show filter items count
  • added option to show publised date in human format
  • added notice if no items found
  • added support for jetpack portfolio type filter
  • added portfolio tags support
  • updated color picker to support WordPress 4.9
  • fixed PhotoSwipe small images loading on mobile devices (performance improvements)
  • prevent load more click if href is empty
  • minor fixes and changes


  • fixed conflict with WooCommerce Photoswipe gallery


  • added ID in title to tinymce and visual composer dropdowns
  • fixed fly effect transition in Safari
  • fixed tiles filter jumping
  • fixed iframe height calculation if in theme set html height 100%;


  • added options to hide arrows and numbers from the paged pagination
  • added support for WPBakery Page Builder
  • added class attribute in shortcode
  • added excerpt field to the portfolio post type
  • removed enqueued portfolio scripts and styles from the admin builder
  • improved fly effect, now direction calculated more correct
  • changed all items-styles hover effects
  • fixed showing excerpt from excerpt post fields
  • fixed php short tag usage
  • fixed conflict with WPBakery Page Builder and old isotope plugin


  • fixed php enqueue errors


  • preview changed to iframe – now all the portfolio styles showed the same as on your website frontend. Now iframe reloaded when changed all options (Customizer experience here)
  • added wrapper to filter and pagination
  • added tinyMCE dropdown with list of visual-portfolio shortcodes
  • added CodeMirror for custom CSS field
  • added loading overlay
  • changed paged arrows to font-awesome
  • changed default templates style
  • changed popup gallery – now used image meta title and description
  • fixed popup gallery buttons style conflict with default WordPress themes
  • fixed styles rendering on initialization (without timeout now)
  • fixed isotope items animation and remove
  • fixed preloader opacity transition (added wrapper)
  • fixed showing paged pagination if no items
  • minor changes


  • added custom CSS field
  • added object-fit polyfill to support old browsers
  • added custom image sizes
  • added responsive
  • added wrapper to items layout
  • removed margin from main vp container
  • fixed array option retrieve error
  • minor changes


  • initial Release