Custom WordPress Slider – Coverflow
I got a request from a client to replicate a certain slider and its functionality from a Joomla! website. Found out that the slider is a Coverflow Slider and upon looking on WordPress Plugin Repository I can't find a good one that will work based on the requested functionalities. So I decided to create a custom Coverflow Slider.
The custom slider was built using: Toolset plugin for the Custom Post Type, Bootstrap (for the video modal) and jQuery.Flipster (for the coverflow effect).
Let's segregate the process in to 5 steps:
First, Install Toolset and create 2 New post types. Yes, 2 post types because we are going to have it in parent-child relationship to have a Repeating group field in the Parent Custom post type.
Here's the link for the toolset documentation on setting up the repeatable group field using: https://wp-types.com/documentation/user-guides/creating-groups-of-repeating-fields-using-fields-tables/
Second, Create the Custom Post fields for our custom post type. I needed four fields to comply with the needed functionality.
1. Image Field - For the background of the slider image.
2. Multiple Lines Fields - for the content of the Lightbox (Bootstrap Modal)
3. Single Line Field - For the Name in the Slider
4. Multiple Lines Fields - for the description in the slider
Third, we now need to add the libraries of jQuery.Flipster and Bootstrap to the theme.
Just add a new folder in your child theme for JS and CSS then add the needed files, here are the links.
Flipster: CSS and JS
Bootstrap: CSS and JS
After adding these files into your (Child) theme files, add this code to your functions.php files.
function flipster_js() { wp_enqueue_script( 'flipster_js', get_stylesheet_directory_uri() . '/js/jquery.flipster.min.js', array( 'jquery' ), '1.0', true ); wp_enqueue_script( 'bootstrap_js', get_stylesheet_directory_uri() . '/js/bootstrap.min.js', array('jquery'), '3.3.7', true ); } add_action('wp_enqueue_scripts', 'flipster_js'); function flipster_css() { wp_enqueue_style( 'flipster_css', get_stylesheet_directory_uri() . '/css/jquery.flipster.min.css', true ); wp_enqueue_style( 'bootstrap_css', get_stylesheet_directory_uri() . '/css/bootstrap.min.css', true); } add_action('wp_enqueue_scripts', 'flipster_css');
Fourth, we need to create the shortcode so we can add the slider anywhere in the website. I have created a pastebin for the Shortcode: https://pastebin.com/0PTRCFUy
Here's also the link to Toolset documentation on how to show the custom fields created thru php which we used in the shortcode: https://wp-types.com/documentation/customizing-sites-using-php/functions/
jQuery to be added in the footer.php
jQuery('#coverflow-flipster').flipster({ itemContainer: 'ul', // [string|object] // Selector for the container of the flippin' items. itemSelector: 'li', // [string|object] // Selector for children of `itemContainer` to flip start: 'center', // ['center'|number] // Zero based index of the starting item, or use 'center' to start in the middle fadeIn: 400, // [milliseconds] // Speed of the fade in animation after items have been setup loop: false, // [true|false] // Loop around when the start or end is reached autoplay: false, // [false|milliseconds] // If a positive number, Flipster will automatically advance to next item after that number of milliseconds pauseOnHover: true, // [true|false] // If true, autoplay advancement will pause when Flipster is hovered style: 'coverflow', // [coverflow|carousel|flat|...] // Adds a class (e.g. flipster--coverflow) to the flipster element to switch between display styles // Create your own theme in CSS and use this setting to have Flipster add the custom class spacing: -0.7, // [number] // Space between items relative to each item's width. 0 for no spacing, negative values to overlap click: true, // [true|false] // Clicking an item switches to that item keyboard: true, // [true|false] // Enable left/right arrow navigation scrollwheel: true, // [true|false] // Enable mousewheel/trackpad navigation; up/left = previous, down/right = next touch: true, // [true|false] // Enable swipe navigation for touch devices nav: 'after', // [true|false|'before'|'after'] // If not false, Flipster will build an unordered list of the items // Values true or 'before' will insert the navigation before the items, 'after' will append the navigation after the items buttons: false, // [true|false|'custom'] // If true, Flipster will insert Previous / Next buttons with SVG arrows // If 'custom', Flipster will not insert the arrows and will instead use the values of `buttonPrev` and `buttonNext` buttonPrev: 'Previous', // [text|html] // Changes the text for the Previous button buttonNext: 'Next', // [text|html] // Changes the text for the Next button onItemSwitch: false // [function] // Callback function when items are switched // Arguments received: [currentItem, previousItem] });
CSS:
.modal { text-align: center; padding: 0!important; } .modal:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; margin-right: -4px; } .modal-dialog { display: inline-block; text-align: left; vertical-align: middle; } #coverflow-flipster img{max-width: 700px !important; width: 100% !important;} .flipster__item{float: none !important;} .flipster__item--current .togglediv{ position: absolute; width: 100%; height: 100%; } .flipname, .flipdetails{opacity: 0;} .flipster__item--current .flipname, .flipster__item--current .flipdetails{opacity: 1 !important;} .flipname{font-size: 20px; text-transform: uppercase;} .flipdetails{color: #aaa;} .flipnamedetails{ position: absolute; bottom: 0px; width: 100%; text-align: center; color: #fff; background: url(' images/textGradient.png') 0 -5px; padding-bottom: 10px; } .flipnamedetails p{margin-bottom: 0;}
Working Demo