Integrations

Grid Panda auto-detects and integrates with popular WordPress plugins. Each integration unlocks additional facet sources, card blocks, or indexing capabilities. All integrations are registered via theIntegrationManager and can be toggled in settings.

Auto-detection: Grid Panda checks for each plugin on every request using class_exists(), function_exists(), or defined() checks. Active integrations are shown in Grid Panda → Dashboard → Stats. Go to Grid Panda → Settings → Integrations to manually enable or disable specific modules.
woocommerce

WooCommerce

Detected via class_exists('WooCommerce'). See the WooCommerce documentation for full details.

WC Facet Sources

wc:stock_status, wc:on_sale, wc:attribute:pa_*, post_meta:_price, post_meta:_wc_average_rating

Card Blocks

wc_price, wc_sale_badge, wc_rating, wc_stock_badge, wc_add_to_cart

Dynamic Tags

{{wc:price}}, {{wc:rating}}, {{wc:stock_status}}, {{wc:sku}}, and more

acf

Advanced Custom Fields (ACF)

Detected via class_exists('ACF') orfunction_exists('get_field'). Fires gridpanda/acf/ready when initialized.

ACF as Facet Source

Use any ACF field as a facet source with the standard post_meta: prefix followed by the field name or key. Grid Panda detects ACF fields and uses the ACF field label as the display value in the index:

Source: post_meta:brand         → uses 'brand' ACF field label
Source: post_meta:color         → uses 'color' ACF field label
Source: post_meta:release_year  → uses numeric ACF field value

ACF in Card Builder

The card builder fetches all ACF field groups viaGET /wp-json/gridpanda/v1/cards/acf-fields. ACF fields appear in the block editor's field picker for:

  • The acf_field block type
  • Dynamic tags: {{acf:field_name}}
  • Conditional visibility conditions based on ACF field values

ACF Repeater & Complex Fields

The PostMetaResolver handles serialized ACF values — repeaters, galleries, and multi-select fields stored as PHP serialized arrays are automatically unpacked so each sub-value becomes a separate index row. This allows filtering by any item in a repeater field.

wpml

WPML

Detected via defined('ICL_SITEPRESS_VERSION'). Fires gridpanda/wpml/indexing_setup when initializing.

Multilingual Indexing

Grid Panda indexes each post in every active WPML language. The language column in wp_gridpanda_index stores the language code (e.g. 'en', 'fr', 'de'). At query time, only index rows for the current language are used.

String Translation

Facet names and card labels are registered with WPML's string translation via icl_register_string(). Strings can be translated in WPML → String Translation.

Term Translation

Taxonomy terms indexed per language. When WPML switches language context during indexing, wp_get_object_terms() returns the translated term for the current language.

Facet Count Language Scoping

Facet count queries automatically scope to the current language. A 'Color: Red' facet in English won't count posts indexed for French or German.

polylang

Polylang

Detected via function_exists('pll_languages_list'). Fires gridpanda/polylang/indexing_setup with the active languages array.

Polylang support mirrors WPML: multilingual indexing with language-scoped counts, term translations, and language-aware facet choices. The index uses the same language column in wp_gridpanda_index.

elementor

Elementor

Detected via defined('ELEMENTOR_VERSION'). Registers Grid Panda widgets via the Elementor widgets API.

Grid Panda Grid Widget

An Elementor widget that renders a Grid Panda grid. Settings expose all gridpanda_grid shortcode attributes — select grid by ID or slug, override per_page — in the Elementor Inspector panel.

Grid Panda Facets Widget

An Elementor widget for rendering filter panels. Select facet IDs and optionally scope to a post_type. Can be placed anywhere on the page — Grid Panda JS connects it to any grid on the same page.

See Widgets & Blocks for complete Elementor widget documentation.

gutenberg

Gutenberg / Block Editor

Always active — Grid Panda registers Gutenberg blocks regardless of other plugins. Blocks are registered under the gridpanda/ namespace:

gridpanda/grid

Full Grid Panda grid block with Inspector panel controls for grid ID/slug selection and per_page override. Renders server-side via the block's render_callback.

gridpanda/facets

Facets block with ID selector and post_type scope. Renders server-side. Can be placed in any column or container.

See Widgets & Blocks for complete Gutenberg block documentation.

Integration Lifecycle Hooks

// Fires after each integration boots
add_action( 'gridpanda/integration/booted', function( $integration, $id ) {
    if ( 'woocommerce' === $id ) {
        // WooCommerce integration is ready
    }
}, 10, 2 );

// Register a custom integration
add_action( 'gridpanda/register_integrations', function( $manager ) {
    $manager->register( 'my_plugin', new MyPluginIntegration() );
} );

// Fires when all integrations are ready
add_action( 'gridpanda/integrations/ready', function( $manager ) {
    $active = $manager->get_active(); // array of integration instances
} );