# Visual Portfolio, Photo Gallery & Post Grid #

* Contributors: visualportfolio, nko
* Tags: portfolio, gallery, gallery block, image gallery, wordpress gallery plugin
* Donate link: https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=donate
* Requires at least: 6.2
* Tested up to: 6.9
* Requires PHP: 7.2
* Stable tag: 3.5.2
* License: GPLv2 or later
* License URI: <http://www.gnu.org/licenses/gpl-2.0.html>

Modern photo gallery and portfolio plugin with advanced layouts editor. Clean gallery styles with powerful settings in the Gutenberg block.

## Description ##

**Gallery & Portfolio Plugin For WordPress**
★★★★★<br>

**Portfolio websites are the most popular nowadays.** We created [**Visual Portfolio, Photo Gallery & Post Grid WordPress plugin**](https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=head), to help every creative, agency, and photographers get access to the powerful tools they need to showcase their beautiful works and attract more love from their potential and existing customers.

[youtube https://youtu.be/354pybu91aQ]

[See Live Demo](https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=head) | [Documentation](https://www.visualportfolio.com/docs/getting-started/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=head) | [GitHub](https://github.com/nk-crew/visual-portfolio)

Create beautiful, clean, and powerful photo galleries and portfolio layouts using the Visual Portfolio gallery plugin. It is easy for simple photo galleries, but powerful enough for professionals. Whether you're a photographer, agency, or anything in between, **Visual Portfolio will boost your online presence**.

### 🏆 Visual Gallery Builder ###

Build your portfolio and gallery blocks with no coding knowledge. Thanks to Gutenberg page builder you are able to create and customize galleries visually.

Convenient visual block editor with support to various layouts such as Masonry, Justified, Tiles, Grid, Slider and Carousel. A **well thought out design, powerful features, and years of development** by the nK team make Visual Portfolio a game-changing Portfolio and Gallery plugin that will level the WordPress showcases playing field in your favor to help increase visitors engagement.

### 🚀 Optimized to be Fast as Native ###

Despite the rich functionality, the Visual Portfolio is optimized as much as possible, to be fast and lightweight.

Due to the modular code structure, all scripts and styles are loaded only when they are needed for the current page that displays your gallery. So, your pages will never load unused features.

Pictures are not loaded in the main thread due to lazy loading. Moreover, our plugin is compatible with third-party WebP providers and image optimization plugins.

Smart adaptive image sizes fully supported in any gallery, created with Visual Portfolio plugin.

### 📱 Layouts ###

Our gallery plugin shipped with popular layouts such as Masonry and Justified (Flickr). Every feature optimized and works seamlessly with all of these layouts, you just need to set up and go with no headache. See it in action:

* [Masonry Gallery](https://www.visualportfolio.com/masonry-image-filters/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=layouts)
* [Justified (Flickr) Gallery](https://www.visualportfolio.com/justified-tilt-effect/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=layouts)
* [Tiles Gallery](https://www.visualportfolio.com/tiles-custom-color/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=layouts)
* [Grid Gallery](https://www.visualportfolio.com/grid/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=layouts)
* [Slider Gallery](https://www.visualportfolio.com/slider/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=layouts) (Fade, Carousel, Coverflow)

### 🎨 Prebuilt Skins ###

Showcase your projects ang gallery images with clean and beautiful skins. See it in action:

* [Classic](https://www.visualportfolio.com/masonry/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=effects)
* [Fade](https://www.visualportfolio.com/tiles-paged-pagination/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=effects)
* [Emerge](https://www.visualportfolio.com/masonry-infinite-scroll/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=effects)
* [Fly](https://www.visualportfolio.com/tiles-popup-gallery/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=effects)
* [Caption Move](https://www.visualportfolio.com/masonry-caption-move/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=effects)

### ⚙️ Easy to Customize ###

The gallery block with live preview includes a lot of design settings that are point-and-click, no coding knowledge required. If you're a bit more adventurous, the custom CSS module and PHP filters are set up to be easily used by developers.

### 📁 Portfolio Post Type ###

Optional custom post type `portfolio` will ensure all your portfolios to keep in a single post type. In this way, you can distinguish your portfolios from other post types. Taxonomies are used to categorize your portfolio types, it will help you to group and sort your portfolios. Moreover, you can use these portfolios as a source for your showcase gallery using Visual Portfolio block.

Customize and rename Portfolio archive templates using visual gallery and page builder [https://www.visualportfolio.com/docs/portfolio-archive/](https://www.visualportfolio.com/docs/portfolio-archive/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=archive)

In case you want to use Visual Portfolio plugin for photo gallery only you can disable custom post type registration.

### 💎 Posts Query Builder ###

Fine-tune the source of your galleries. Display posts, portfolios, and any other post types, filter by taxonomies, author, and date ranges, include or exclude specific posts, and much more options.

### 🖼️ Photo Galleries ###

Create galleries using image sets right inside block editor, just drop your images and the gallery is ready. You can create unlimited galleries with different styles, there is no limitation.

### ⚡ Powerful Lightbox ###

Visual Portfolio uses only modern solutions, and lightboxes are not an exception. High performance, mobile optimization, retina-ready, and a wide range of features available in Fancybox and PhotoSwipe plugins, that you can choose for your gallery lightboxes.

**Mobile Optimized** <br> Looks great on every device. Swipe to navigate, spread/pinch to zoom in/out supported on touch devices.

**GPU Accelerated** <br> Hardware accelerated animations for better performance and seamless user experience.

**Smart Loading** <br> Gallery images are responsive and loaded progressively using lazy loading on demand.

**Social Sharing** <br> You can allow users to share photos on Facebook, X, and Pinterest with social sharing buttons.

### 📹 Video and 🎵 Audio Support ###

Visual Portfolio plugin allows you to work with audios and videos within a single gallery. You just need to copy the URL of the video or audio and it will work automatically in the popup gallery. The full list with supported vendors see below (mostly thanks to the Pro plugin).

Supported Video Vendors:

* Youtube
* Vimeo
* IGTV (Instagram)
* TikTok
* Twitch
* Facebook Video
* DailyMotion
* Wistia
* VideoPress
* TED
* Rutube
* Metacafe
* Coub
* Self Hosted Video

Supported Audio Vendors:

* Spotify
* SoundCloud
* Mixcloud
* Beatport
* Self Hosted Audio

### 📈 SEO-Friendly ###

Visual Portfolio plugin is built keeping SEO and performance in mind by defining proper structure and tags. Furthermore, due to optimization, it is lightweight and fast when it comes to page load.

In addition our plugin add images in the sitemap for `All In One SEO`, `Rank Math`, and `Yoast SEO` plugins

### 🏳️ Multilingual & Translation Ready ###

Visual Portfolio adds a new layer of compatibility for [WPML](https://wpml.org/). All blocks are compatible with it and ready for translation. [https://www.visualportfolio.com/docs/multilingual/](https://www.visualportfolio.com/docs/multilingual/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wpml)

### 🛠 Built For Developers ###

Visual Portfolio gives you a wide range of filters and actions to customize every part of your gallery. Also, it allows you to overwrite templates and change it in the theme directory. Moreover, you can customize separate portfolio lists using custom CSS and CSS Variables.

### 🔥 Visual Portfolio Pro ###

> The Visual Portfolio plugin is also available in a professional version which includes more features and enhanced performance! [**Learn more about Visual Portfolio Pro**](https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro)
>
> In order to maintain the free version of the plugin on an ongoing basis, and to provide quick and effective support for free, we offer a Pro version of the plugin. The Pro version allows you to:

* **Advanced Skin Settings**
  * **Image Filters and Blend Mode** – apply Instagram-like filters on images for Normal and Hover states
  * **Transformations** - control the image transformation and border radius for Normal and Hover states
  * **Typography** – control every text part of gallery captions and overlays
  * **Dimensions** – controls paddings, margins and border radius of captions and overlays

* **Stylish Interaction Effects**

  * [Hover Tilt Effect](https://www.visualportfolio.com/justified-tilt-effect/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_effects)
  * [Custom Hover Image](https://www.visualportfolio.com/custom-hover-image-animated-gif/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_effects) - useful for animated GIFs
  * [Caption Move Skin](https://www.visualportfolio.com/masonry-caption-move/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_effects)

* **Social Feeds**
Automatically fetch posts from your social networks to display in gallery on your site.

  * [Instagram](https://www.visualportfolio.com/social-instagram/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [Youtube](https://www.visualportfolio.com/social-youtube/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [Vimeo](https://www.visualportfolio.com/social-vimeo/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [Unsplash](https://www.visualportfolio.com/social-unsplash/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [X](https://www.visualportfolio.com/social-x/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [Flickr](https://www.visualportfolio.com/social-flickr/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [Dribbble](https://www.visualportfolio.com/social-dribbble/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [Twitch](https://www.visualportfolio.com/social-twitch/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * [RSS](https://www.visualportfolio.com/social-medium-rss/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_social_feeds)
  * VK (Vkontakte)

* [**Theft Protection**](https://www.visualportfolio.com/theft-protection/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_protection)

  * **Watermarks** - add your logo on top of your images to make them harder to steal
  * **Password Form** - add a password to gallery blocks and send it to your clients
  * **Age Gate** - Protect visitors from viewing adult content

* [**Photos Proofing**](https://www.visualportfolio.com/docs/proofing/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro_proofing)
Communicate with your clients in a modern way:

  1. **Create Proofing Gallery** - Easily create a gallery with photos, as you did before. Change styling, layout, etc. if you want.
  2. **Send to a Client** - Send photos collection to your client for proofing. The client will be able to leave comments on individual photos and communicate with you.
  3. **Get Approval** - Once the client approves the selection, you will be able to see the selected photos and copy filenames for post-production.

* **Advanced Click Actions**
Manually configure how to open specific item types and filter clicking on title or on image.

* **Responsive Breakpoints Settings**
Manually control the screen sizes, which used by the automatic responsive function to adapt your gallery layouts.

* **AJAX Improvements**
Requests properly cached and links preloaded before you click.

* **Advanced Query Settings**
Filter by Author, Date Range, Ignore Sticky Posts, exclude posts without Featured Image, and much more...

* **Quick View for Posts and Pages**
Display posts and pages in popup iframe, not only image and video galleries. It's like works preview in Dribbble and Behance, but on your own site.

* **Popup Gallery Deep Linking**
Makes URL automatically change when you open popup and you can easily link to a specific popup image.

* **White Label**
Possibility to use your brand name and logo instead of our "Visual Portfolio".

[**Find much more portfolio and gallery features of Visual Portfolio Pro today!**](https://www.visualportfolio.com/pricing/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=pro)

### 🌟 More Features ###

* **Lightboxes for Standard WordPress Images**
Image lightbox available for Visual Portfolio galleries as well as for standard WordPress images and galleries in your content.

* **AJAX Loading and Pagination**
Every dynamic part of the Visual Portfolio plugin is using AJAX to update the gallery content in live mode.
Organized galleries and portfolio lists will make your website look more professional, easy to navigate and result in a better user experience. We prepared 3 types of paginations for you:
  * Infinite Scroll
  * Load More button
  * Paged pagination

* **Filter**
Filter your gallery and portfolio by taxonomies (mostly categories and tags). Let users select a category and see the relevant items.

* **Sort gallery items by date and title**
Users may sort gallery items by date and title.

* **GIFs Support**
Our plugin automatically displays the animated GIFs in photo galleries. Also, you can show the animated GIFs on mouseover with the Pro plugin.

* **Items Gutters**
Manually adjust the spacing between gallery images and projects.

* **Images Lazy Loading**
Images lazy loading boost your page loading speed. You don't need to worry about it, just use your beautiful images in the gallery, Visual Portfolio will do all the work for you.

* **Images Aspect Ratio**
All built-in gallery layouts support custom image aspect ratio. You don't need to crop the image manually.

* **Images Focal Point**
Sometimes it is very important to specify the focal point so that the custom aspect ratio does not cut off important parts of the photos. For example, people's faces on the portrait photos.

* **Custom Links for Gallery Images**
By default, gallery images will contain the links to original images. You can manually set the custom links, for example, to a website or Youtube video.

* **RTL Support**
Visual Portfolio natively supports RTL languages, proper styles loaded automatically, without user interaction.

* **Elementor and WPBakery Page Builder support**
There is a helpful widget for Elementor and shortcode for WPBakery Page Builder, which will let you select one of the available Saved Layouts and output it.

* **Responsive and Mobile Ready**
Visual Portfolio and Galleries are completely responsive and mobile ready – layouts automagically transforms to display perfectly on your screen size.

* **Custom CSS**
Deeply customize the look of your gallery using custom CSS and CSS Variables.

* **... And Much More**
All available features you can find on the [plugin's site](https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=more_features) and [documentation](https://www.visualportfolio.com/docs/getting-started/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=docs).

## Screenshots ##

1. Gutenberg Blocks
2. Gutenberg Block Settings
3. Projects Admin

## Installation ##

### 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](https://codex.wordpress.org/Managing_Plugins#Manual_Plugin_Installation).

## Frequently Asked Questions ##

### Does Visual Portfolio has documentation? ####

Yes, our plugin has documentation to easily get started with galleries. Read it here - [Visual Portfolio Documentation](https://www.visualportfolio.com/docs/getting-started/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs)

### What themes does Visual Portfolio support? ####

Visual Portfolio has been tested with many WordPress themes and supports all major WordPress themes. Since we follow WordPress’ plugin development guidelines, you can rest assured that Visual Portfolio galleries will work perfectly, no matter what theme you use. If you’ve installed Visual Portfolio and are facing issues, it might not be because of a theme incompatibility. Please get in touch with the support team by opening a support ticket in our support forum, and we will fix it for you.

### Do I have to remove other Gallery and Portfolio plugins if I install Visual Portfolio? ####

That is recommended. Visual Portfolio is designed to be an all in one Gallery and Portfolio plugin. If you use other Gallery plugins with Visual Portfolio on your website, not only will the performance of your website be negatively affected, but both plugins working together can produce unexpected conflicts or errors.

### Are the galleries mobile friendly? ####

Yes, Visual Portfolio built with mobile optimization in mind. It will automatically fit your screen size, so you don't need to worry about. Furthermore, we prepared lazy loading, which significantly increases page loading speed. Before making a decision, just check by yourself how [Visual Portfolio works on mobile devices](https://www.visualportfolio.com/masonry/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs).

### Can I upload multiple images at once? ####

Yes, you can batch upload entire photo galleries at one time thanks to WordPress media library functionality.

### Is there pagination for photo galleries? ####

Yes, you can use 3 type of pagination when displaying photo galleries or posts. Choose the number of photos to display and select Paged, Load More or Infinite Loading pagination. Examples with all gallery pagination types are [available on the Visual Portfolio website](https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs).

### Can I filter images and projects by categories? ####

Yes, our plugin has built in support for AJAX Filter by items categories. See a couple of examples:

* [Category filtering with links](https://www.visualportfolio.com/grid/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs)
* [Category filtering + Sort with Select](https://www.visualportfolio.com/filterable-and-sortable/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs)

### Can I add an external links to galleries? ####

Yes, you can add external links to your gallery items.

### Is Visual Portfolio developers friendly? ####

Yes, we prepared a lot of filters and actions for developers, so you can easily extend default functionality for your need. [Read here more info for developers](https://www.visualportfolio.com/docs/developers/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs).

### Is Visual Portfolio translation ready? ####

Yes, Visual Portfolio has full translation and localization support via the `visual-portfolio` textdomain. To submit a translation, see <https://translate.wordpress.org/projects/wp-plugins/visual-portfolio/>

### More Information ####

For more information, feel free to visit [Visual Portfolio official website](https://www.visualportfolio.com/?utm_source=wordpress.org&utm_medium=faq&utm_campaign=docs).

## Changelog ##

= 3.5.2 - Feb 18, 2026 =

* security: fixed local file inclusion via path traversal

= 3.5.1 - Feb 12, 2026 =

* updated supported WP version to 6.9
* added support for Blocksy settings in our Portfolio CPT
* minor changes

= 3.5.0 - Feb 6, 2026 =

* improved performance by reducing database queries
* minor changes
* **Pro:**
* !IMPORTANT: Google Photos integration completely removed
* !IMPORTANT: social integration migrated to custom post type. The system will automatically migrate your old social posts to the new system. This will take time because migration occurs in small portions.
* added ability to manage downloaded social posts in custom post type and images in Media library
* improved proofing feature:
  * added possibility to reset proofing status
  * added possibility to save selection before submitting
  * added filter by selected/unselected
  * added possibility to require minimum and maximum number of images for submission
  * improve proofing actions bar - added number of selected and total number of images, added Save button, changed select/deselect links to checkbox
* improved performance in image galleries by removing redundant full option calls

= 3.4.1 - Nov 11, 2025 =

* fixed sticky posts appearing in Manual Selection posts source
* **Pro:**
* fixed option Ignore Sticky Posts incorrectly change output for Current Query and Custom Query posts sources
* fixed option Ignore Sticky Posts appear when Manual Selection posts source selected

= 3.4.0 - Nov 5, 2025 =

* added custom lightbox gallery support using `.vp-lightbox-gallery` class
* added lightbox event support for third-party galleries. For example, JS events like `initFancybox` and `beforeInitPhotoSwipe` now also fire on non-portfolio galleries
* added SEO optimizations
* fixed register_script to use in_footer true by default, which we changed in recent plugin updates and broke some features, for example - iframe preview resizer
* fixed lazy loading conflict with WordPress Lightbox block
* fixed pattern context bug and posts query type handling (fixed issue with displaying block when WooCommerce installed)
* fixed RSS feed generation for portfolio archives
* fixed controls persistence and rendering in Saved Layouts
* fixed taxonomy filter counts to use actual query results
* fixed experimental filter block to work with nested loop blocks
* skip lazy loading from applying to images with fetchpriority="high" attribute
* **Pro:**
* migrated VK to new api domain
* deprecated Google Photos integration
* fixed click action for custom image
* fixed updater api

= 3.3.16 - Jun 26, 2025 =

* started our way to transition to modern blocks. Added new **experimental** blocks:
  * DON'T USE THESE BLOCKS ON PRODUCTION! Development is still in progress and we may break these blocks.
  * Gallery Loop
  * Filter by Category
  * Pagination Wrapper
    * Infinite
    * Load More
    * Next
    * Previous
    * Numbers
  * Sort
* **Pro:**
* fixed proofing gallery hash links in comments
* minor fixes

= 3.3.15 - Jun 4, 2025 =

* fixed broken css and js urls for lazyload fallback (used in legacy browsers only)
* **Pro:**
* updated used X API to v2
* fixed Google Photos integration API errors
* fixed X integration caching issue
* fixed social integration download image resolution conversion during compression
* fixed click action for item with custom popup image
* fixed updater caching issue that sometimes caused Forbidden errors

= 3.3.14 - May 25, 2025 =

* tested with WordPress 6.8
* fixed WPML error in Saved Layouts
* changed links from visualportfolio.co to www.visualportfolio.com
* rename Twitter to X
* **Pro:**
* migrate Pro plugin from Paddle to LemonSqueezy
  * added support for affiliate links
* fixed _load_textdomain_just_in_time notice

= 3.3.13 - Mar 25, 2025 =

* fixed broken Swiper when installed Elementor 3.28
* fixed rare bug with displaying category links on archive pages
* **Pro:**
* added support for more Audio formats in popup Audio links (https://www.visualportfolio.com/docs/projects/project-formats/#supported-audio-platforms)
* added support for more Video formats in popup Video links (https://www.visualportfolio.com/docs/projects/project-formats/#supported-video-platforms)
* fixed wrong infinity scroll loading when permalinks set to Plain
* fixed GIF hover image reset when hovering on inner overlay elements

= 3.3.12 - Dec 20, 2024 =

* fixed order by Image Title when both Title Source and Description Source is set to None
* fixed Portfolio Manager role editing Saved Layouts when Project custom post type disabled
* fixed image selection popup in block editor JS error

= 3.3.11 - Dec 15, 2024 =

* added WP 6.7 compatibility
* fixed id attribute rendering
* fixed some styles in editor
* **Pro:**
* fixed Advanced Click Actions sometimes not properly displaying a Popup
* fixed title display error in popup caption
* fixed Instagram integration - you must reconnect to use the Instagram API instead of deprecated Instagram Basic Display API. Learn more: <https://www.visualportfolio.com/docs/social-feeds/instagram/>

= 3.3.10 - Sep 30, 2024 =

* fixed possible XSS via stored HTML and Fancybox script

= 3.3.9 - Jul 17, 2024 =

* fixed Sort by Date option not working correctly
* fixed PHP warning when image was removed from Media library but still exists in the gallery
* fixed WPRocket delay JS conflict with lazyloading

= 3.3.8 - May 29, 2024 =

* **Pro:**
* fixed click action on gallery items with a custom URL in saved layouts

= 3.3.7 - May 27, 2024 =

* fixed displaying date on gallery items
* fixed gallery images resets data in saved layouts

= 3.3.6 - May 16, 2024 =

* fixed DESC order for "Manual" and "Rand" image orders
* rename "Default" order to "Manual"
* **Pro:**
* fixed Hover CSS Filter styles loading if there is no Default CSS Filter provided
* fixed custom image URL in the gallery, applied from the first item to all other items

= 3.3.5 - May 15, 2024 =

* fixed PHP warning from `array_key_exists` function
* fixed wrong attribute output for select control with bool value
* fixed gallery sorting algorithm, now it should work correctly

= 3.3.4 - May 11, 2024 =

* fixed dynamic selector block options rendering on the frontend.

= 3.3.3 - May 11, 2024 =

* fixed custom title tag XSS vulnerability (properly escape the custom tag and prevent using non-predefined values)

= 3.3.2 - Apr 30, 2024 =

* add more sort options in image galleries: Item Title, Item Description, Image Title, Image Description, Image Caption, Image Alt
* improved image gallery sort code - images with empty field will be always placed after items with non-empty field
* fixed the behavior of the "All" filters link when the portfolio archive page set as the home page
* **Pro:**
* fixed Skin typography settings error in WP 6.5
* fixed image gallery non-working Hover and Custom Popup settings when you change it
* fixed horizontal thumbnails displaying in Fancybox
* fixed displaying Pro plugin settings opacity

= 3.3.1 - Mar 13, 2024 =

* added support for Download button in PhotoSwipe
* added Horizontal Order option to Masonry layout
* added support for lazy loading inside AJAX callbacks
* added support for WooCommerce images lazy loading
* improved block gallery images in editor - allow selecting images with shift key pressed
* changed Justified Row Height option minimum threshold to 20
* fixed gallery images in block editor Uncategorized filter
* fixed image blinking after filter in Masonry, Tiles and Grid layouts
* removed stagger delay from Masonry, Tiles and Grid layouts because it is not working properly in large galleries
* minor improvements
* **Pro:**
* fixed Overlay Under Image option in Emerge and Caption Move styles

= 3.2.4 - Feb 26, 2024 =

* added stagger delay for Masonry, Grid and Tiles layouts
* added proper horizontal order for Masonry layout
* added possibility to edit gallery images in bulk
* added gallery images filter by category in editor
* fixed Portfolio menu item name change when on Taxonomy archive page
* fixed duplicating Portfolio page after WordPress XML file import
* **Pro:**
* added Twitch avatar caching to fix missing link
* added possibility to add any block on Proofing pages
* fixed Grid vertical align option
* minor fixes

= 3.2.3 - Dec 12, 2023 =

* fixed displaying editor block when creating new Saved Layout

= 3.2.2 - Nov 29, 2023 =

* added support for asset file change time when enqueue without .asset.php - better support for caching plugins
* fixed Elementor preview stopped working

= 3.2.1 - Nov 29, 2023 =

* fixed Pro plugin path and url detection - now it should work correctly when Free plugin is removed
* fixed sitemap fatal error

= 3.2.0 - Nov 25, 2023 =

* added support for proper SEO meta URLs in Portfolio archives and Filtered pages in Yoast SEO, AIOSEO, Rank Math
* added Skin option to change item title tag
* added `vpf_extend_posts_source` filter
* added check for image existence when resave the gallery from the popup
* added check for caption is empty and don't print the figcaption
* added support for new Ghost Kit extensions
* updated blocks apiVersion to 3 to allow iframe usage in editor
* fixed PHP 8.* warning
* fixed lazy loading script styles added event when 3rd-party lazy loading used
* fixed lazy loading without srcset
* fixed lazy loading placeholder displaying when used Hover image
* fixed width calculation for lazy loading and picture tag
* fixed lazysizes script version number
* fixed lazy loading conflict with WP Rocket Delay JS setting
* fixed typo in `DONOTCACHEOBJECT` constant
* fixed featured image focal point control conflict in WP 6.3
* fixed Grid layout preview JS error in editor
* simplified lazy loading placeholder animation
* changed lazy loading styles to use modern :has() CSS (with fallback for old browsers)
* removed jQuery usage from lazy loading script
* **Pro:**
* IMPORTANT: changed the Pro plugin to standalone, which is not requires the Free version installed anymore
* added Setup Wizard support to all Social Account controls
* fixed Share URL and paged gallery wrong URL
* fixed mime detection for images in Flickr social feeds
* fixed init conditionize script once opened Social settings panel

= 3.1.3 - Jul 1, 2023 =

* improved PhotoSwipe popup zoom for large vertical images
* changed 'Projects' CPT label to portfolio page name
* changed images and overlay border-radius to clip-path (better performance)
* fixed unexpected JS error when Sortable control have an undefined value (happens in Advanced Click Action for a single user after migration from older plugin version)

= 3.1.2 - Jun 6, 2023 =

* renamed `Portfolio Items` to `Projects`
* fixed playing videos in background in PhotoSwipe
* fixed portfolio archive hidden pagination in some cases
* fixed portfolio archive friendly URL in load more button
* fixed portfolio archive filter and sort paged URLs

= 3.1.1 - May 17, 2023 =

* fixed Archive mapping PHP notice when no Archive Page ID available
* renamed `Carousel` to `Slider`

= 3.1.0 - May 12, 2023 =

* added support for gradients in overlay backgrounds
* added `Restore Focus` setting to the Popup gallery
* added support for GET variables `vp_page`, `vp_filter`, `vp_sort`, `vp_search` in canonical and short links
* added PHP filter `vpf_global_data`
* changed CSS to use Gap instead of hack with margins
* changed popup data `<div>` to `<template>`. We need this change for 3 reasons:
  * prevent popup data from indexing
  * prevent a lot of not needed content rendering
  * in some cases this content causes bugs with layout styles
* changed default popup title and description source for Posts content. Use Image title and description, and not the post title and content
* changed overlay displaying from `focus` to `focus-visible`
* fixed Popup data displaying even when Click Action is URL
* fixed transition caption transition CSS variable name in the Classic skin
* fixed Skin editor error on WP 6.0 because of using `NavigatorToParentButton` component
* fixed Select control dropdown is not visible in editor when opened popup

> v3 Migration Guide – <https://www.visualportfolio.com/docs/troubleshooting/migration-to-v3/>

= 3.0.0 - Apr 13, 2023 =

* completely reworked Skin options and some UI elements of block controls this helped us to structure deep Skin customizations such as:
  * Typography control
  * Dimensions control (overlay padding, caption items gap, etc)
  * Blend Mode for overlay
  * Image transform for normal and hover states
  * Image border radius for normal and hover states
* changed the structure of Skin templates - use classes and CSS variables with `overlay` and `caption` names where appropriate
* added caption support for popup in video items
* improved controls dynamic CSS rendering - merge all styles with same selector with better formatting
* improved filter and pagination URLs to friendly on portfolio archive page (good for SEO)
* updated Swiper to v8.4.7
* changed template styles version - use dynamic value based on `filemtime` function return
* fixed portfolio category archives redirect when portfolio archive set as Front Page
* fixed pagination on portfolio taxonomy archive pages
* fixed canonical tags usage on portfolio category archives (fixes problems with SEO)
* fixed wrong Current Query generated when changed Portfolio on Front Page setting
* fixed Slider dynamic items height with Classic Style wrong items width
* fixed Slider dynamic items height with FireFox wrong items width
* fixed Slider items height incorrect size when used Items Height and Minimal Height options
* fixed conflict with Elementor new Swiper library (added in Elementor v3.11.0)
* fixed Elementor double lightbox on the pages, which does not use the Elementor page builder
* removed hardcoded CSS for popup top position based on admin bar height, use `--wp-admin--admin-bar--height` variable instead
* fixed error when using an array in control `sanitize_callback` (only in custom user controls)
* renamed `Items Style` → `Skin`
* renamed `Items Click Action` → `Click Action`
* new hooks for developers:
  * added more data to `vpf.editor.controls-render-inner-data` JS filter
  * PHP `vpf_register_block_attribute_data`
  * PHP `vpf_register_block_attributes`
  * PHP `vpf_items_style_builtin_controls`
  * PHP `vpf_pagination_item_data`
  * PHP `vpf_controls_dynamic_css_value`
  * PHP `vpf_controls_dynamic_css_styles_array`
  * JS `vpf.editor.controls-dynamic-css-value`
  * JS `vpf.editor.controls-dynamic-css-styles-object`
  * jQuery `afterShowFancybox`
* minor changes

= 2.22.0 - Feb 12, 2023 =

* added support for Youtube Shorts in popup
* added possibility to start AJAX loading when already in loading state (fixes the Search module conflict with concurrent requests)
* added support for displaying Portfolio Categories and Portfolio Tags in the `post-terms` block
* fixed filter, sort and pagination URLs to display absolute URLs
* fixed creating notices over on over again if no items found after AJAX requests
* fixed deprecated Elementor warnings
* fixed saving permalink error in WordPress 6.1
* fixed src `data:` escaping in lazy load images
* fixed minimal pagination active item wrong circle size
* fixed Fly overlay z-index when add Hover Image from Pro plugin
* fixed block crash in the Widgets and Templates editor
* fixed go pro link error when no Visual Portfolio admin menu exists
* changed defaults for popup title and description sources
* removed white background from Fancybox popup for better support vertical videos
* removed `clipboard-polyfill` and use native `navigator.clipboard.writeText` instead
* minor changes

= 2.21.2 - Nov 25, 2022 =

* fixed JS error when open WordPress images in Lightbox
* fixed JS error when changing gallery image data

= 2.21.0 - Nov 24, 2022 =

* added templates for popup data in `/templates/popup/`, so developers can override it now in the theme templates
* added auto height to filter/sort dropdown
* added support for HTML tags in the popup title
* added groups for controls for better UI
* added more steps in the block Setup Wizard
* added Wide alignment to newly added blocks by default
* added a notice for large galleries to use Infinite pagination for better performance
* added Items Per Page limit and Infinite pagination to the gallery when user adds more than 40 images in the Setup Wizard
* added support for align option in Filter and Sort shortcodes
* added `text_all` attribute to Filter shortcode
* improved shortcodes UI in Saved Layouts
* changed default Infinite pagination threshold from 250px to 400px
* fixed wrong popup image displaying when custom URL used
* fixed post featured image focal point save error
* fixed Elementor widget in Safari can't select layout
* fixed Jetpack lazy loading re-layout Masonry conflict
* fixed displaying popup data in HTML when click action disabled
* fixed duplicated portfolio page in Archive settings
* fixed PHP warning when Editors open admin screen or when plugin first time active
* fixed multiple select controls sanitize
* fixed Go Pro link style conflict with 3rd-party URLs
* minor changes and fixes

= 2.20.3 - Oct 3, 2022 =

* fixed error when close popup gallery opened from the native gallery block
* fixed focus current item in the native gallery block when closing popup gallery

= 2.20.2 - Sep 29, 2022 =

* improved accessibility - focus gallery item in after closing popup
* fixed images displaying in Slider with Classic style on Apple devices
* fixed Jetpack lazy loading when new items loaded in Visual Portfolio gallery using pagination or filters
* fixed displaying Read More button in Classic style, when all other meta disabled

= 2.20.1 - Sep 15, 2022 =

* fixed 3rd-party lazy loading scripts add lazy attributes to noscript img tags
* fixed noscript styles loading when used optimization plugins
* fixed conflict with Elementor lightbox when used optimization plugins
* fixed undefined author field usage

= 2.20.0 - Sep 6, 2022 =

* !important - this update contains a lot of code rewrites regarding the security improvements, and some parts may not work as expected. Please, let us know as soon as possible, if something stopped working after this update. We have tested it in all our sites, but some rare cases may still stop working.
* added code for data sanitization in places, where we missed it
* added nonces usage to prevent possible hacker attacks
* added support for Swiper duplicates images lazy loading in 3rd-party carousels
* added Author to the Popup Title and Description sources
* improved lazy loading script
  * prevent adding noscript when image does not have vp-lazyload class after processing (for example, when skipped from adding lazy loading)
  * prevent processing earlier if setting is disabled - faster code execution
  * restored missing noscript for lazy images inside Visual Portfolio galleries
* fixed Settings tab URL if Portfolio Post Type disabled

= 2.19.1 =

* fixed Classic style image displaying bug in slider with dynamic height option
* fixed Color Picker error in custom Skins
* fixed Swiper slides displaying conflicts, which comes from some 3rd-party plugins
* minor changes

= 2.19.0 =

* added stricter permission check for rest route `update_layout`
* allow to call rest route `get_layouts` to all users, who can edit posts
* added settings to exclude images from lazy loading by attribute <https://www.visualportfolio.com/docs/settings/images/>
* improved Gallery images selection - you can now select images without holding Ctrl/Shift keys
* improved Gallery control - added pagination to prevent overwhelming block settings
* improved Gallery control - added additional info to selected image popup (such as source file URL, file size, etc...)
* improved Visual Portfolio admin menu styles by adding dividers
* updated Swiper to the latest version 8.3.2
* fixed popup gallery open if default prevented already (fixed conflict with slider Free Scroll)
* fixed Slider text selection when trying to drag in the gap
* fixed Slider displaying images in a row before Swiper init
* fixed wrong popup gallery items parsing when Slider layout used
* fixed images little "blink" effect when swipe Slider to the left
* fixed Saved Layouts editor block control 'NaN' value when select an empty value
* fixed Saved Layouts API reset meta data if you don't provided all available attributes in your request
* minor changes

= 2.18.0 =

* added possibility to change items count on Portfolio archive page in the plugin settings
* added portfolio archive page classes to the `<body>` tag
* improved Gallery sortable component in block settings
* improved Gallery component image popup in block settings to display Title and Description loaded dynamically from the Source settings
* changed Gallery component `Add Images` button to `Edit Gallery` button. You are not allowed to insert duplicate photos in a single gallery
* prevent closing multiple posts block option dropdown when selected value. Easier to select multiple posts from dropdown
* fixed security vulnerability - rest call wrong permission check
* fixed Taxonomy selector error with empty taxonomy
* fixed displaying posts when empty Taxonomy selected in the query options
* fixed some JS errors and warnings in the Gutenberg editor
* removed custom meta settings from non-viewable post types
* removed `will-change` styles usage
* minor changes

Further changelog entries can be found in the [CHANGELOG.md](https://github.com/nk-crew/visual-portfolio/blob/master/CHANGELOG.md) file.
