Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/vol4ikman/custom-tabs-plugin/archive/refs/heads/main.zipResponsive, accessible tabs section for WordPress with a shortcode renderer and an ACF-powered admin UI.
Overview
Custom Tabs Plugin renders a multi-tab content block with:
- Keyboard-accessible tab navigation
- Rich quote content per tab
- User metadata (avatar, name, role, company image)
- Per-tab desktop/mobile background images
- Percent highlight block and CTA
- Global gallery (outside tabs), limited to 5 images
The plugin provides sensible defaults and supports content management from a custom admin page.
Features
- Shortcode:
[custom_tabs_plugin] - Admin page:
Custom Tabsin WordPress dashboard - ACF local field group:
Custom Tabs settings - Global gallery field (
custom_tabs_gallery) outside tabs - Tab repeater field (
custom_tabs_tabs) with media and text fields - Responsive mode switching:
- Desktop: accessible ARIA tabs
- Mobile (
<=1279px): synced Slick sliders for tab headers and panels
- Dynamic asset versioning with
time()cache-busting - Frontend behavior handled by plugin JS + Slick Carousel
Requirements
- WordPress 5.8+
- PHP 7.4+ (recommended 8.0+)
- Advanced Custom Fields (ACF) plugin (required for admin editing experience)
- jQuery (bundled with WordPress)
- External Slick Carousel assets loaded from jsDelivr CDN
Installation
- Copy folder to:
wp-content/plugins/custom-tabs-plugin - Activate Custom Tabs Plugin in WP Admin > Plugins.
- Install and activate Advanced Custom Fields.
- Open WP Admin > Custom Tabs and configure fields.
Usage
Add shortcode anywhere shortcodes are supported:
[custom_tabs_plugin]
Admin Configuration
Open: WP Admin > Custom Tabs
Field Group: Custom Tabs settings
- Tabs (repeater)
- Gallery (top-level gallery, max 5 images)
Tabs Repeater Fields
title(text)quote(WYSIWYG, basic toolbar)user_avatar(image)user_name(text)user_role(text)user_company(image)description(textarea)percent(text)percent_description(textarea)tab_image(image)tab_image_mobile(image)cta_text(text)cta_url(url)
Global Fields
custom_tabs_gallery(gallery)- Maximum: 5 images
- Stored outside tabs
Data Flow
The plugin resolves settings in this order:
- ACF option values (
get_field(..., 'option')) if ACF is active - Legacy option fallback (
custom_tabs_plugin_options) - Internal defaults from
get_default_settings()
Image values are normalized to URL strings. Gallery values are normalized to URL arrays and hard-limited to 5 entries.
Accessibility
Tabs implement ARIA roles and keyboard interactions:
- Arrow Left/Right/Up/Down: move between tabs
- Home: first tab
- End: last tab
Implemented in assets/js/custom-tabs-plugin.js.
On mobile viewports (<=1279px), tabs/panels switch to synced Slick sliders, while desktop keeps ARIA tab semantics.
Styling & Fonts
- Typekit import:
https://use.typekit.net/wuz0gtr.css - Font family:
"proxima-nova", sans-serif - Main style file enqueued:
assets/css/custom-tabs-plugin.min.css - SCSS source:
assets/scss/custom-tabs-plugin.scss
Hooks
Filter: custom_tabs_plugin_items
Filter tab items before rendering:
add_filter( 'custom_tabs_plugin_items', function( $tabs ) {
// Modify $tabs here.
return $tabs;
} );
Files
custom-tabs-plugin.php- main plugin class, admin setup, ACF fields, shortcode renderingassets/js/custom-tabs-plugin.js- desktop tab logic + mobile Slick sync logicassets/scss/custom-tabs-plugin.scss- source stylesassets/css/custom-tabs-plugin.min.css- deployed frontend styles
Frontend Markup Notes
Gallery output structure:
.ctp__gallery(container + title).ctp__gallery-items(logos row wrapper).ctp__gallery-item(single logo item)
Notes
- Asset versioning currently uses
time()at runtime to prevent stale cache while developing. - If you want long-term browser caching in production, switch to a fixed semantic version or filemtime strategy.
Troubleshooting
Admin fields do not appear
- Ensure ACF is installed and activated.
- Confirm you are on Custom Tabs admin page.
Shortcode renders empty
- Ensure at least one tab exists (or defaults are available).
- Check for PHP errors/logs and plugin conflicts.
Images not rendering
- Verify image fields contain valid media values.
- Confirm media URLs are publicly accessible.
Changelog
1.0.0
- Initial public plugin structure
- ACF-backed admin settings page
- Repeater tabs with media/text fields
- Global gallery field (max 5)
- Accessible shortcode tabs renderer