ACO Product Grid
Complete documentation for the premium WooCommerce plugin
Overview
ACO Product Grid is a premium WooCommerce plugin that radically redesigns the product loop/grid on shop pages, category pages, shortcodes, carousels, and page builder widgets. It replaces the default WooCommerce product card layout with a modern, style-driven design featuring hover effects, video support, badges, floating icon buttons, wishlist, compare, countdown timers, and more.
Once activated and licensed, the plugin automatically overrides the default WooCommerce product loop on:
- Shop / archive pages
- Category pages
- Tag pages
- Search results
- Any page using the native
shortcode - Elementor WooCommerce widgets
- Gutenberg WooCommerce blocks
Key Features
- 4 Pre-designed visual styles with distinct hover effects
- Sale badge with automatic percentage calculation
- OUT OF STOCK badge with customizable colors
- Custom badge per product (NEW, SELLING FAST, LIMITED)
- Hover image swap (simple or gallery slider)
- Product video support (MP4 autoplay/hover)
- BunnyCDN integration for video uploads
- Floating icon buttons (Wishlist, Quick View, Compare)
- Built-in native Wishlist system
- Built-in Compare system (up to 4 products)
- Quick View modal with Swiper gallery
- Quick Add modal for fast purchases
- Swatches limiter with "+N remaining" counter
- Grid column selector (2–6 columns)
- Marquee banner (animated scrolling text)
- Countdown timer for sales
- AJAX "Load More" pagination
- Native theme pagination support
- Native
shortcode override - Custom icon uploads for cart, wishlist, compare, quick view
- Full license management + OTA updates
- Elementor & Gutenberg widgets/blocks
- WPML / Multilingual ready (Spanish included)
- Optional data cleanup on uninstall
Requirements
| Requirement | Minimum |
|---|---|
| WordPress | 5.8+ |
| WooCommerce | 6.0+ |
| PHP | 7.4+ |
Installation & Activation
- Download the plugin ZIP file from your ACO Design account.
- Log in to your WordPress admin dashboard.
- Go to Plugins → Add New → Upload Plugin.
- Choose the downloaded ZIP file and click Install Now.
- Click Activate Plugin.
Upon activation, the plugin:
- Creates a default configuration with Style 1 active.
- Automatically creates a Wishlist page (slug:
wishlist) with the[acodesign_wishlist]shortcode. - Registers the Product Grid admin menu under the WordPress dashboard.
License Activation
ACO Product Grid is a premium plugin that requires a valid license key.
- Go to Product Grid → License in the WordPress admin.
- Enter your license key (format:
ACO-PG-Tx-xxxxx). - Click Activate License.
- The server validates the key and displays your license tier, status, and domain count.
License Tiers
| Tier | Domains | Prefix |
|---|---|---|
| Starter (L1) | 1 domain | ACO-PG-T1- |
| Pro (L2) | 3 domains | ACO-PG-T2- |
| Agency (L3) | 25 domains | ACO-PG-T3- |
| Private Agency (L4) | 1 domain | ACO-PG-AGE- |
Styles Overview
ACO Product Grid includes 4 pre-designed visual styles. Each style alters the product card layout, hover effects, and interaction patterns.
Style 1 — Mardox V9 (Default)
The original flagship design. Features:
- Clean image-first layout
- Hover reveals floating icons and add-to-cart button over the image
- Title and price below the image
- SVG icon buttons with hover color transitions
Style 2 — Hover Swatches on Image
Built for stores heavily using variation swatches. Features:
- Variation swatches displayed directly on the product image on hover
- Swatches become interactive — clicking a swatch replaces the product image
- Ideal for fashion, furniture, and color-variant products
Style 3 — Interactive Quantity Bar
Designed for high-volume or quick-buy stores. Features:
- Quantity selector integrated into the product card
- AJAX add-to-cart with quantity support
- Streamlined purchase flow without leaving the loop
Style 4 — Tooltips Above Icons
Refined, minimal design with tooltip labels. Features:
- Floating action icons display tooltip labels above them on hover
- Clean, label-driven interaction for better UX clarity
Admin Settings
Access settings via Product Grid in the WordPress admin menu. The settings page is organized into 9 tabs.
General Tab
| Setting | Description |
|---|---|
| Active Style | Choose which style applies globally (Style 1–4) |
| Video Playback Mode | Autoplay — video plays automatically. Hover — video plays on hover. |
| Hover Image Style | Simple Hover — swaps to second gallery image. Gallery Slider — cycles through all gallery images. |
| Badge Sale Mode | Percentage displays discount (e.g. −25%). Text displays generic "Sale!" label. |
| Delete on Uninstall | When enabled, removes all plugin data (options, user meta, post meta) upon deletion. |
BunnyCDN Setup Guide
This integration lets you upload heavy catalog videos directly to BunnyCDN, freeing up storage space, RAM, and bandwidth from your hosting server.
Step 1: Create and Configure the Storage Zone
- Log in to your Bunny.net dashboard.
- In the left sidebar, go to Storage and click + Add Storage Zone.
- Fill in the following fields:
- Name: Enter a unique name in lowercase with no spaces (e.g.,
mystore-videos). - Main Storage Region: Select the geographic region closest to your target audience.
- Name: Enter a unique name in lowercase with no spaces (e.g.,
- Click Add Storage Zone.
- Once created, enter the zone, go to the Access section in the left sidebar, and copy:
- Storage Zone Name (username).
- Password (the FTP/API read-write password).
Step 2: Create the Pull Zone
It is critical to connect the Pull Zone to the Storage so that videos can be served publicly through the CDN.
- In the left sidebar of Bunny, go to CDN (or Pull Zones) and click + Add Pull Zone.
- Fill in the following fields:
- Name: A descriptive name (e.g.,
video-aco). - Origin Type: Select Storage Zone.
- Storage Zone: Choose the storage you created in Step 1 (
mystore-videos).Important: Do NOT select "Custom Origin" or enter your website's address, as this will cause 404 errors when looking up videos.
- Name: A descriptive name (e.g.,
- Click Add Pull Zone.
- Once finished, Bunny will provide a delivery hostname, usually in the format:
https://[your-zone-name].b-cdn.net(e.g.,https://video-aco.b-cdn.net). Copy it.
Step 3: Configure the Plugin in WordPress
- In your WordPress admin, go to Product Grid → Settings → BunnyCDN Integration tab.
- Check the Enable API Uploader box.
- Fill in the details copied in the previous steps:
- Storage Zone Name: The exact name of your Storage (e.g.,
mystore-videos). - Storage Password: The password from the Storage's Access tab.
- Main Storage Region: Select in the dropdown the exact region where you created the Storage.
- Pull Zone URL: Paste the full Pull Zone URL, including
https://(e.g.,https://video-aco.b-cdn.net).
- Storage Zone Name: The exact name of your Storage (e.g.,
- Click Test Connection. If everything is correct, you will see a green message:
Connection successful!. - Click the blue Save Settings button.
Step 4: Upload Videos to Products
- Edit any WooCommerce product.
- In the product data panel, locate the Product Video (Catalog) section.
- Click Upload to BunnyCDN, select your video file (
.mp4or.webm, up to 5 MB). - The plugin will process the upload and automatically fill the Video URL field with the final CDN URL.
- Important! Click the Update button on the product to save the information.
Main Button Tab
Customize the add-to-cart button appearance on product cards.
| Setting | Description |
|---|---|
| Button Background (Normal / Hover) | Background color in normal and hover states |
| Button Text (Normal / Hover) | Text color in normal and hover states |
| Add to Cart Text | Custom button text for simple products |
| Select Options Text | Custom button text for variable products |
| Quick Add Button Text | Custom button text for the Quick Add modal trigger |
| Modal Button BG / Text | Quick View / Quick Add modal button colors (normal + hover) |
Floating Icons Tab
Configure the floating action icons displayed on product card hover.
| Setting | Description |
|---|---|
| Enable Quick View / Wishlist / Compare | Show/hide each icon individually |
| Icon Background / Color (Normal + Hover) | Customize colors for each state |
| Compare Bar Position | Left or Right side of the screen |
| Compare Bar Side / Bottom Offset | Distance from edges in pixels |
Product Card Tab
Fine-tune the appearance of the product card itself.
| Setting | Description |
|---|---|
| Enable Column Selector | Show a column toggle (2–6 cols) on the shop page |
| Enable Ratings | Show star ratings in the product loop |
| Mobile Columns | Number of columns on mobile (1 or 2) |
| Text Alignment | Left, Center, or Right alignment for title and price |
| Swatches Limit | Maximum swatches visible per card (0 = unlimited) |
| Image Object Position | Crop anchor point for product images (top, center, bottom, left, right) |
| Marquee Settings | Enable global marquee, default text, colors, speed |
| Countdown Settings | Auto-show on single product, header text, colors |
| Typography | Title, price, badge colors and font settings |
| Card Styling | Background, border color, width, radius |
Wishlist Tab
Configure the built-in wishlist system.
| Setting | Description |
|---|---|
| Wishlist Page | The page containing [acodesign_wishlist]. Use Generate Wishlist Page to auto-create. |
| Wishlist Button on Single Product | Auto — adds button automatically below price. Manual — use [acodesign_wishlist_button] shortcode. |
| Wishlist Counter Font Size | Size of the wishlist counter icon (px) |
| Counter Colors (Normal + Hover) | Icon, background, and text colors |
| Single Button Colors | Background, border, icon, text (normal + hover) |
Custom Icons Tab
Upload custom SVG or PNG icons to replace the default action buttons on product cards.
| Setting | Description |
|---|---|
| Add to Cart Icon | Custom icon for the add-to-cart button on product cards |
| Wishlist Icon | Custom icon for the wishlist heart button |
| Compare Icon | Custom icon for the compare button |
| Quick View Icon | Custom icon for the quick view eye button |
| Carousel Arrow Left / Right | Custom icons for carousel navigation arrows |
mask-image for full color control via the Floating Icons color settings.Shortcodes Tab
| Setting | Description |
|---|---|
| Show Category in Shortcodes | Display the product category name above the title |
| Category Text Color / Font Size / Weight | Category label typography |
| Shortcode Generator | Build [acodesign_products] with filters (category, tag, on sale, best selling, attribute, pagination type) |
License Tab
Manage your license key activation, deactivation, and revalidation. Displays current tier, status, and domain information. The license server endpoint is https://acodesign.dev.
Shortcodes
[acodesign_products] — Product Grid
Displays a WooCommerce product grid with ACO styles and optional AJAX "Load More" or native theme pagination.
[acodesign_products columns="4" limit="8" total_limit="24" category="clothing" load_more="true" style="style_1"]
| Parameter | Values | Default | Description |
|---|---|---|---|
columns | 2–6 | 4 | Number of columns |
limit | Integer | 8 | Products shown per page |
total_limit | Integer | 12 | Max products total. Set -1 for unlimited |
category | Slug(s) | — | Comma-separated category slugs |
tag | Slug(s) | — | Comma-separated tag slugs |
on_sale | true / false | — | Show only sale products |
best_selling | true / false | — | Sort by best selling |
top_rated | true / false | — | Sort by top rated |
attribute | Slug | — | Product attribute taxonomy (e.g., color) |
terms | Slug(s) | — | Attribute term slugs (comma-separated) |
load_more | true / false | false | Enable AJAX Load More button |
paginate | true / false | false | Enable native theme pagination (mutually exclusive with load_more) |
archive | true / false | false | Inherit current shop/archive loop query (ignores other query params) |
style | style_1 – style_4 | Active style | Override the global active style |
[acodesign_carousel] — Product Carousel
Displays a Swiper.js-powered product carousel with ACO styles.
[acodesign_carousel columns="4" limit="8" mobile_columns="2" autoplay="true" arrows="true" dots="true" style="style_2"]
| Parameter | Values | Default | Description |
|---|---|---|---|
limit | Integer | 8 | Number of products |
columns | Integer | 4 | Desktop columns |
mobile_columns | Integer | 2 | Mobile columns |
autoplay | true / false | true | Auto-advance slides |
arrows | true / false | true | Show prev/next arrows |
dots | true / false | true | Show pagination dots |
category | Slug(s) | — | Comma-separated category slugs |
tag | Slug(s) | — | Comma-separated tag slugs |
on_sale | true / false | — | Show only sale products |
best_selling | true / false | — | Sort by best selling |
top_rated | true / false | — | Sort by top rated |
attribute | Slug | — | Product attribute taxonomy (e.g., color) |
terms | Slug(s) | — | Attribute term slugs (comma-separated) |
carousel_type | default / infinite | default | Loop type; infinite enables continuous looping |
style | style_1 – style_4 | Active style | Override the global active style |
[acodesign_wishlist] — Wishlist Page
Renders the full wishlist display. Place this on the page designated as your Wishlist page.
[acodesign_wishlist]
No parameters. The plugin automatically creates a Wishlist page with this shortcode on activation.
[acodesign_wishlist_counter] — Wishlist Counter
Displays a wishlist icon with an item count badge. Clicking it navigates to the wishlist page.
[acodesign_wishlist_counter]
No parameters. Typically used in the header via a widget, shortcode block, or theme hook.
[acodesign_wishlist_button] — Wishlist Button
Renders an "Add to Wishlist" / "Browse Wishlist" toggle button.
[acodesign_wishlist_button id="123"]
| Parameter | Values | Default | Description |
|---|---|---|---|
id | Product ID | Current product | Product to add/remove. Auto-detects on single product pages. |
[acodesign_product_countdown] — Countdown Timer
Renders a countdown timer for a product's sale end date.
[acodesign_product_countdown id="123"]
| Parameter | Values | Default | Description |
|---|---|---|---|
id | Product ID | Current product | Product with countdown date set |
Gutenberg Blocks
ACO Product Grid registers three Gutenberg blocks:
ACO Product Grid Block
- Block name:
acodesign/product-grid - Category: WooCommerce
- All shortcode parameters are exposed as block attributes in the inspector panel. Uses
ServerSideRenderfor accurate preview in the editor.
ACO Product Carousel Block
- Block name:
acodesign/product-carousel - Category: WooCommerce
- Mirrors the
[acodesign_carousel]shortcode parameters. Supports wide and full alignment.
ACO Product Archive Block
- Block name:
acodesign/product-archive - Category: WooCommerce
- Inherits the current taxonomy or shop loop. Provides ACO styling to archive pages via block attributes.
Elementor Widgets
Three Elementor widgets are registered when Elementor is active:
ACO Product Grid Widget
- Widget name:
acodesign_product_grid - Category: WooCommerce Elements
- Exposes all
[acodesign_products]shortcode parameters as Elementor controls, including a style selector (Style 1–4).
ACO Product Carousel Widget
- Widget name:
acodesign_product_carousel - Category: WooCommerce Elements
- Exposes all
[acodesign_carousel]shortcode parameters as Elementor controls.
ACO Product Archive Widget
- Widget name:
acodesign_product_archive - Category: WooCommerce Elements
- Automatically inherits the current WooCommerce query and applies ACO styling with a style selector (Style 1–4).
Product-Level Features
Product Video
Add an MP4 video to any product that plays in the product loop instead of the static image.
- Edit a product in WooCommerce.
- Scroll to the Product Video meta box.
- Upload an MP4 video (via BunnyCDN if enabled, or enter a direct MP4 URL).
- Save the product.
The video plays according to the Video Playback Mode setting:
- Autoplay: Video starts automatically when visible.
- Hover: Video plays only when the user hovers over the product card.
Video meta keys: _aco_video_url, _aco_video_playback_mode. The plugin adds the CSS class aco-has-video to video-enabled product cards.
Sale / OOS / Custom Badges
Three badge types appear on product cards:
- Sale Badge: Automatically applied to on-sale products. Can display the discount percentage (e.g., −25%) or the text "Sale!" based on the Badge Sale Mode setting.
- OUT OF STOCK Badge: Automatically applied to out-of-stock products.
- Custom Badge: Manually set per product. Edit a product → Custom Badge Text field (e.g., "NEW", "SELLING FAST").
All badge colors are configurable under Product Card → Badge Colors.
Marquee Banner
A horizontally scrolling text banner that overlays the product image.
- Globally enabled/disabled under Product Card → Enable Global Marquee.
- Default text configurable in settings.
- Per-product override: Edit a product → enable Enable Marquee and set Marquee Text.
Marquee meta keys: _aco_enable_marquee, _aco_marquee_text
Countdown Timer
A countdown timer displayed on product cards and optionally on single product pages.
- Global setting: Auto-show on single product pages under Product Card.
- Per-product setup: Edit a product → enable Enable Countdown and set Countdown Date/Time.
- Shortcode: Use
[acodesign_product_countdown]to place the timer anywhere.
Countdown meta keys: _aco_enable_countdown, _aco_countdown_date, _aco_countdown_time
Hover Image Swap
When hovering over a product card, the image swaps to another product image.
Two modes (set under General → Hover Image Style):
- Simple Hover: Swaps to the second image in the product gallery.
- Gallery Slider: Cycles through all gallery images while the cursor hovers over the card.
Built-in Wishlist System
ACO Product Grid includes a fully native wishlist system — no third-party plugin required.
- Guests: Wishlist items stored in a cookie (
acodesign_wishlist), valid for 30 days. - Logged-in users: Wishlist items stored in user meta (
_acodesign_wishlist). - AJAX toggle: Clicking the heart icon adds/removes the product without page reload.
- Wishlist page: The
[acodesign_wishlist]shortcode renders the full wishlist. - Wishlist counter: The
[acodesign_wishlist_counter]shortcode shows a floating icon with item count.
Built-in Compare System
Compare up to 4 products side by side.
- Guests: Compare items stored in a cookie (
aco_compare), valid for 30 days. - Logged-in users: Compare items stored in user meta (
_aco_compare). - Floating Compare Bar: Appears at the bottom-right (or left) when products are added.
- Compare Modal: Full-screen modal with a table comparing products side by side.
Quick View & Quick Add Modals
Quick View
Clicking the eye icon opens a modal with:
- Full Swiper.js product image gallery
- Title, price, rating
- Product description excerpt
- Variation swatches (if variable product)
- AJAX add-to-cart (with quantity selector)
Quick Add
A simplified modal for quick purchases with product image, title, price, quantity selector, and AJAX add-to-cart button.
Swatches Limiter
When using Variation Swatches for WooCommerce, the plugin can limit the number of swatches shown per product card. Configure under Product Card → Swatches Limit. Set to any number (e.g., 3) to show only the first N swatches. Remaining swatches display a "+N" count indicator. Set to 0 for unlimited.
Grid Column Selector
A user-facing toolbar above the shop loop that lets visitors choose how many columns to display.
- Toggle: Product Card → Enable Column Selector
- Options: 2, 3, 4, 5, or 6 columns
- Persistence: The user's choice is saved in
localStorage
Compatibility
Theme Compatibility
ACO Product Grid implements a five-layer theme compatibility system:
- Template override: Forces
content-product.phpfrom the plugin viawc_get_templatefilters. - Hook purging: Removes all WooCommerce loop hooks originating from theme directories.
- Hook restoration: Re-adds core WooCommerce loop hooks if the theme removed them.
- Hook rescue: Moves plugin hooks from theme-specific custom hooks back to native WooCommerce hooks.
- Global assassin: In-memory purging of Kadence/Blocksy-specific hooks and closures.
Tested themes: Kadence, Blocksy, Astra, Storefront, and most WooCommerce-compatible themes.
Variation Swatches for WooCommerce
The plugin integrates with Variation Swatches for WooCommerce by CartFlows (free):
- Forces swatches position to
woocommerce_after_shop_loop_item_title - Enables swatches on related products and product pages
- Forces CFVSW assets on all frontend pages for modal support
- Disables CFVSW native swatch limitation to let ACO's limiter handle it
- Offers one-click installation from the admin notices area
YITH Plugins
The plugin is compatible with:
- YITH WooCommerce Wishlist — forced to shortcode mode; loop injection disabled.
- YITH WooCommerce Quick View — button reused inside ACO's floating icons wrapper.
- YITH WooCommerce Compare — button reused inside ACO's floating icons wrapper.
WPML / Multilingual
The plugin is WPML compatible. Translation files included:
acodesign-product-loop-styles.pot(template)acodesign-product-loop-styles-es_ES.po/.mo(Spanish)
AJAX Load More
The [acodesign_products] shortcode supports AJAX "Load More" pagination. When load_more="true" is set, a Load More button appears below the grid. Clicking it loads the next batch of products via AJAX without a page reload. The button disappears when all products are loaded.
Native Theme Pagination
The [acodesign_products] shortcode also supports native numbered pagination via paginate="true". This renders standard WooCommerce pagination links below the grid, styled to match your theme.
Data Storage & Privacy
| Data | Storage | Duration |
|---|---|---|
| License key | wp_options (encrypted AES-256-CBC) | Permanent |
| Plugin settings | wp_options (acodesign_pls_settings) | Permanent |
| Wishlist (guests) | Cookie acodesign_wishlist | 30 days |
| Wishlist (users) | User meta _acodesign_wishlist | Permanent |
| Compare (guests) | Cookie aco_compare | 30 days |
| Compare (users) | User meta _aco_compare | Permanent |
| Product video URL | Post meta _aco_video_url | Permanent |
| Product video playback mode | Post meta _aco_video_playback_mode | Permanent |
| Marquee settings | Post meta _aco_enable_marquee, _aco_marquee_text | Permanent |
| Countdown settings | Post meta _aco_enable_countdown, _aco_countdown_date, _aco_countdown_time | Permanent |
| Custom badge | Post meta _aco_custom_badge_text | Permanent |
| Grid column preference | localStorage | Browser session |
Uninstall & Cleanup
The plugin includes an optional deep cleanup setting under General → Delete on Uninstall.
When enabled:
- All plugin options (
acodesign_pls_settings, license data) are removed. - All user meta (
_acodesign_wishlist,_aco_compare) is deleted. - All product meta (
_aco_video_url,_aco_marquee_text,_aco_countdown_date, etc.) is removed via the centralized meta keys registry. - The Wishlist page is not deleted (it becomes a normal page).
When disabled (default): no data is removed on uninstall.
Support
For support, bug reports, or feature requests:
- Email: hello@acodesign.dev
- Website: acodesign.dev/acodesign-product-grid
- Documentation: acodesign.dev/docs/product-grid
- FAQs: acodesign.dev/acodesign-product-grid/aco-product-grid-faqs
Before contacting support:
- Ensure your license is active (Product Grid → License).
- Try revalidating your license if you see issues.
- Check that WooCommerce is updated to the latest version.
- Temporarily switch to a default theme (Storefront) to rule out theme conflicts.
- Disable other plugins one by one to identify conflicts.