Frequently Asked Questions

Straight answers to the questions we hear most about TableCrafter v3.5.6 — what data sources work, how caching and refresh behave, where the real limits are, and how export, styling, and licensing fit together.

Data Sources Caching & Performance Security Export Licensing

Data sources & setup

What data sources can TableCrafter read?

The single source attribute on the [tablecrafter] shortcode accepts three kinds of public URLs, and the plugin auto-detects which one you gave it:

A minimal table is just a source:

[tablecrafter source="https://api.example.com/products.json"]

My JSON is nested. How do I point at the right array?

Use root with a dot path to the array you want to render. If your API returns {"items": {"list": [ ... ]}}:

[tablecrafter source="https://api.example.com/feed.json" root="items.list"]

Do I have to use shortcodes?

No. The same engine ships three ways to embed a table, all backed by the identical attributes:

MethodWhereIdentifier
Gutenberg blockBlock editor (WordPress 5.0+)tablecrafter/data-table
ShortcodeAny theme / classic editor (WordPress 3.0+)[tablecrafter]
Elementor widgetElementor editor, with live data preview"TableCrafter Data Table"
ℹ️

Use the visual builder under the TableCrafter admin menu to configure options, preview live data, and copy a ready-made shortcode. In a PHP template you can also call echo do_shortcode('[tablecrafter source="..."]');.

Does TableCrafter store my data in the WordPress database?

No. TableCrafter is a viewer, not a store. It fetches data from your source on demand and keeps only a short-lived cached copy as a WordPress transient. Your wp_posts and wp_postmeta tables stay clean — nothing is imported or duplicated into them.

Caching, refresh & performance

How does caching work, and how fresh is the data?

TableCrafter uses a Stale-While-Revalidate (SWR) strategy. The rendered HTML and parsed data are stored in a transient for one hour. Visitors are served the cached copy instantly; once a cached entry is older than 5 minutes, the next page view schedules an invisible background refresh (via the tc_refresh_single_source WP-Cron event) so the cache is rebuilt without anyone waiting on your upstream API.

Can I make a table update live on its own?

Yes — that is separate from background caching. Enable client-side polling with auto_refresh and set the interval in milliseconds:


[tablecrafter source="https://api.example.com/live.json" auto_refresh="true" refresh_interval="30000" refresh_countdown="true"]

The default interval is 300000 (5 minutes). Companion attributes refresh_indicator, refresh_countdown, and refresh_last_updated control the on-screen refresh UI.

How do I clear or pre-warm the cache?

TableCrafter registers a WP-CLI command:

# Remove all cached TableCrafter transients
wp tablecrafter clear-cache

# Re-fetch and rebuild the cache for every tracked source
wp tablecrafter warm-cache

How big a dataset can it handle?

There is no hard row cap in the shortcode, but practical limits come from where the work happens:

ConcernReal limit / behavior
Fetch timeout30 seconds per data request (10 seconds for health checks), with up to 3 retries using exponential backoff.
Export memoryTested to handle roughly 5,000 rows under 50 MB of memory on the server.
Front-end renderingVery large tables are paginated client-side — set per_page to keep the DOM light.

For large feeds, trim what you load with include (whitelist columns) and paginate:

[tablecrafter source="https://api.example.com/big.json" include="name,price,symbol" per_page="25" search="true"]
💡

Because tables are rendered server-side as real HTML, the data is crawlable by search engines and counts toward Core Web Vitals — the SWR cache means visitors rarely wait on the upstream API.

Security & access

Is the server-side proxy safe to expose?

Yes. When you point at a remote URL, your server fetches it (which also sidesteps browser CORS errors), and that proxy is guarded several ways:

Can I connect to a private / authenticated API?

The free version targets public sources or key-in-URL APIs (where the API key is part of the query string). For services that need header-based auth, OAuth, or token storage, the plugin can encrypt and store a token securely (used for the Airtable integration), but full OAuth/header auth is outside the free scope — see the Pro options below or contact us for a custom build.

Export

What export formats are supported, and are they real files?

Enable export with export="true". Three formats are produced by the canonical export handler (includes/class-tc-export-handler.php):

FormatWhat you get
csvStandard comma-separated values, honoring the current filters.
xlsxA genuine OOXML workbook that opens as a real spreadsheet — not a renamed CSV or HTML file.
pdfA structurally valid PDF 1.4 document with proper objects and cross-reference table.
[tablecrafter source="https://api.example.com/orders.json" export="true" search="true"]

Files are generated server-side into a protected uploads subfolder (tablecrafter-exports/, locked down with an .htaccess deny rule), served through nonce-protected download URLs, and cleaned up automatically. Developers can adjust export templates via the tc_export_templates filter.

Styling & customization

How do I restyle the tables to match my theme?

TableCrafter renders standard HTML tables (and card layouts on mobile) with predictable, prefixed class names you can target from your theme's CSS:

ClassElement
.tc-table-containerOuter wrapper around the table
.tc-tableThe desktop <table> itself
.tc-cards-container / .tc-cardMobile card view wrapper and individual cards
.tc-card-label / .tc-card-valueField label and value inside a mobile card

High-contrast and focus states are driven by CSS variables such as --tc-border-color, --tc-text-color, --tc-bg-color, and --tc-focus-color, which you can override in your own stylesheet.

Are there JavaScript hooks for custom behavior?

Yes. The front-end script dispatches namespaced CustomEvents on the table container that you can listen for — for example reacting when a user taps a mobile card:

document.querySelector('.tablecrafter-container')
  .addEventListener('tablecrafter:cardTap', function (e) {
    console.log(e.detail); // row data + index
  });

Other dispatched events include tablecrafter:cardView and tablecrafter:cardEdit. For debugging, set window.TABLECRAFTER_DEBUG = true before the script runs to surface verbose logging.

Requirements, licensing & support

What are the requirements?

How is it licensed, and what's the paid upgrade?

TableCrafter is free and licensed under GPLv2 or later. For teams that need editable, permissioned data, there's a separate premium product, Advanced Data Tables for Gravity Forms (formerly Gravity Tables), which adds frontend editing, role-based permissions, bulk actions, advanced filtering, conditional formatting, and Excel/CSV/PDF Pro export. Custom feature work and integrations are available for a fee — contact info@fahdmurtaza.com.

ℹ️

Still stuck? Run wp tablecrafter clear-cache to rule out a stale cache, and confirm your source URL is public and returns valid JSON or CSV — those two checks resolve the large majority of "table won't load" reports.

Next, see data-sources.html to dig into source-specific setup, and shortcode-reference.html for the full attribute list.