Settings & Options
All Grid Panda settings are stored in the WordPress options table with the gridpanda_ prefix. They are managed through the Grid Panda → Settings admin page and the REST API atGET/PUT /wp-json/gridpanda/v1/settings.
Caching
Controls REST API response caching and ETag support.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_enable_caching | bool | true | Master switch for REST API response caching. When disabled, every render request hits the database directly. |
| gridpanda_cache_ttl | int (seconds) | 3600 | How long rendered grid responses are cached. Default 1 hour. Set to 0 to disable TTL-based expiry. |
| gridpanda_rest_cache_ttl | int (seconds) | 3600 | Separate TTL for other REST endpoints (facet choices, stats). Allows different cache lifetimes for read-heavy endpoints. |
| gridpanda_enable_etag | bool | true | When true, REST responses include an ETag header. Clients that send a matching If-None-Match get a 304 Not Modified, saving bandwidth. |
API & Security
CORS policy and rate limiting for the REST API.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_enable_cors | bool | false | Add Access-Control-Allow-Origin headers to REST responses. Only needed for headless setups where the frontend domain differs from WordPress. |
| gridpanda_cors_origin | string | home_url() | The allowed origin domain when CORS is enabled. Defaults to the WordPress home URL. Accepts a single origin or '*'. |
| gridpanda_rate_limit_enabled | bool | true | Enable request rate limiting per IP. Prevents abuse of the public render endpoint. |
| gridpanda_rate_limit_requests | int | 60 | Maximum number of requests per minute per IP before 429 Too Many Requests is returned. |
| gridpanda_enable_debug | bool | false | Log Grid Panda errors and query details to the PHP error log. Do not enable on production — increases log verbosity significantly. |
Indexing
Controls the batch size and processing behaviour of the indexer.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_index_batch_size | int (10–1000) | 100 | How many posts are indexed per queue job execution. Lower values reduce peak DB load; higher values speed up full reindexes on capable servers. |
| gridpanda_index_per_request | int (10–1000) | 100 | Alias used in some contexts for batch size. Same constraint range. |
SEO
Controls canonical URLs, robots directives, meta templates, Open Graph, and sitemap integration. See the SEO documentation for full details on each feature.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_seo_clean_urls_enabled | bool | false | Enable clean permalink-style filter URLs (/shop/filter/color-red/) instead of query strings (?fx_color=red). Requires pretty permalinks. |
| gridpanda_seo_max_indexable_depth | int (1–10) | 2 | Maximum facet depth level to include in the XML sitemap. Depth 1 = single-facet URLs. Depth 2+ = multi-facet combinations (use with care — exponential growth). |
| gridpanda_seo_robots_strategy | string | 'noindex' | How to handle robots for filtered pages. 'noindex' adds noindex,follow. 'canonical_only' relies on canonical URL to deduplicate without noindex. |
| gridpanda_seo_meta_title_template | string | '' | Template for filter page <title>. Supports placeholders: {filter_label}, {filter_value}, {site_name}, {page_title}. Empty = use the base page title. |
| gridpanda_seo_meta_description_template | string | '' | Template for the meta description on filtered pages. Same placeholders as the title template. |
| gridpanda_seo_enable_open_graph | bool | true | Output Open Graph meta tags (og:title, og:description, og:url) on filtered pages. |
| gridpanda_seo_enable_sitemap | bool | false | Include indexable filter URLs in the XML sitemap. Integrates with WordPress core sitemaps, Yoast SEO, and Rank Math. |
Integrations
Grid Panda auto-detects active plugins. This setting lets you explicitly enable or disable individual integration modules.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_enabled_integrations | array of slugs | [] | List of integration slugs to activate. Auto-detection populates this on first activation. Valid slugs: woocommerce, acf, elementor, wpml, polylang. |
Responsive Breakpoints
Grid columns and layout settings use these breakpoints to switch between mobile, tablet, and desktop views.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_breakpoint_mobile | int (px) | 768 | Maximum viewport width considered mobile. Below this value the grid switches to the configured mobile column count. |
| gridpanda_breakpoint_tablet | int (px) | 1024 | Maximum viewport width considered tablet. Between mobile and this value the tablet column count is used. |
Advanced
Plugin lifecycle and data management settings.
| Option Key | Type | Default | Description |
|---|---|---|---|
| gridpanda_permalink_slug | string | 'filter' | The URL segment used in clean filter URLs. Default produces /shop/filter/color-red/. Change to a different slug if 'filter' conflicts with another route. |
| gridpanda_delete_data_on_uninstall | bool | false | When true, all Grid Panda database tables and wp_options entries are deleted on plugin uninstall. Leave false to preserve data across reinstalls. |
| gridpanda_version | string | "1.0.0" | Installed plugin version stored in options. Used by the migration system to determine which schema migrations have already run. |
Managing Settings via REST API
All settings are accessible programmatically via the Settings REST endpoints. Requires manage_options capability.
Read all settings
GET /wp-json/gridpanda/v1/settings
Authorization: Basic base64(user:app_password)
Response: {
"enable_caching": true,
"cache_ttl": 3600,
"seo_clean_urls_enabled": false,
...
}Update settings (partial update supported)
PUT /wp-json/gridpanda/v1/settings
Content-Type: application/json
{
"enable_caching": false,
"seo_clean_urls_enabled": true,
"seo_robots_strategy": "canonical_only"
}Export & import settings
# Export full settings bundle
POST /wp-json/gridpanda/v1/settings/export
Response: { "settings": {...}, "counts": {...}, "version": "1.0.0" }
# Import settings bundle
POST /wp-json/gridpanda/v1/settings/import
Body: { "settings": {...} }
Response: { "success": true, "imported": 18, "keys": [...] }
# Purge all cached responses
POST /wp-json/gridpanda/v1/settings/purge-cacheOverriding Settings via Filters
Many settings can be overridden at runtime using WordPress filters without changing the stored option value. This is useful for multi-site setups or environment-specific configuration:
// Disable clean URLs on specific pages
add_filter( 'gridpanda/seo/clean_urls_enabled', function( $enabled ) {
if ( is_page( 'checkout' ) ) {
return false;
}
return $enabled;
} );
// Override robots strategy programmatically
add_filter( 'gridpanda/seo/robots_strategy', function( $strategy ) {
return 'canonical_only';
} );
// Override rate limit per authenticated user
add_filter( 'gridpanda/rest/rate_limit', function( $limit, $is_authenticated ) {
return $is_authenticated ? 300 : 60;
}, 10, 2 );