How to Set Up Pagination in a WordPress Table with TableCrafter

Updated July 2026 • 6 min read • By Fahad Murtaza • By Fahad Murtaza

TableCrafter live search, sorting, filtering, and pagination out of the box
TableCrafter live search, sorting, filtering, and pagination out of the box

Displaying hundreds of rows in a single WordPress table is a guaranteed way to frustrate visitors and slow down your page. TableCrafter's built-in pagination breaks your data into manageable pages, keeps load times fast, and gives users straightforward controls to navigate between records, all without writing a single line of PHP. This guide walks you through every pagination option available in TableCrafter, from the basic row-count selector to the advanced AJAX-powered auto-refresh workflow. WordPress powers 43% of all websites globally (W3Techs, July 2026), and TableCrafter bridges the gap between the data you collect and the tables your users need to see, no custom PHP, no dashboard access required for viewers. The free version on WordPress.org supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV/PDF, role-based column visibility, and auto-refresh. Every table embeds on any page with a [tablecrafter] shortcode or. In a 2024 study of business WordPress sites, 68% of teams needed non-admin users to update form data at least weekly (WP Engine Survey, 2024).

Why Pagination Matters for WordPress Tables?

When a table renders every entry at once, the browser has to parse and paint potentially thousands of DOM nodes before the user can interact with anything. For tables backed by Gravity Forms entries, which can accumulate quickly in active sites, this becomes a real performance problem. Pagination solves it at the source: the server returns only the rows needed for the current page, keeping the HTML payload small and the interface responsive.

TableCrafter handles pagination server-side through its AJAX pipeline. Every page navigation fires a request to wp-admin/admin-ajax.php with the current page number, active filters, and a nonce for security. Only the matching slice of rows comes back, and the table re-renders in place, no full page reload.

Free tier note: Pagination is available on the Free plan for tables of any size. The per-page selector, navigation controls, and page-count display all work out of the box.

How Does Step 1, Open Your Table in the TableCrafter Builder Work?

Navigate to TableCrafter → Tables in your WordPress admin. If you have not created a table yet, click Add New to open the table builder and connect it to a Gravity Forms form or another data source. If you already have a table, hover over its name in the list and click Edit.

The builder is divided into tabs: Columns, Filters, Permissions, Display, and Advanced. Pagination lives under the Display tab.

The column mapping you define here is stored as a JSON configuration in the WordPress database. You can export this configuration using the TableCrafter export tool and import it to another table or another site. This is useful when replicating a table layout across multiple pages or when migrating a table to a staging environment for testing before going live.

Shortcode reminder: Once saved, embed the table anywhere with [tablecrafter id="X"], [tablecrafter id="X"], or [tablecrafter id="X"], all three map to the same renderer.

How Does Step 2, Configure Pagination in the Display Tab Work?

Click the Display tab inside the table builder. You will find a Pagination section with the following controls:

After adjusting these settings, click Save Table. Changes take effect immediately on any page where the shortcode is embedded, no cache flush needed for the setting itself, though you may want to purge your page cache if you run a caching plugin.

How Does Step 3, Controlling Pagination via Shortcode Attributes Work?

If you want different pagination behaviour on different pages without creating separate tables, you can override display settings directly in the shortcode. This is handy when the same data table appears in a widget sidebar (small row count) and a full-width page (larger row count).

[tablecrafter id="12" per_page="25"]

[tablecrafter id="12" per_page="10" show_per_page_selector="false"]

[tablecrafter id="12" per_page="50" show_page_info="true"]

The per_page attribute accepts any positive integer. Setting show_per_page_selector="false" hides the dropdown so visitors cannot override your chosen value, useful when you want strict control over layout density. Shortcode attributes always take precedence over the saved table settings for that embed.

TableCrafter re-fetches this data on each page load by default. If your data source updates infrequently and your site has significant traffic, enable the built-in caching option in the table's Performance tab. This stores the fetched data for a configurable number of minutes and serves it from WordPress transients, reducing API calls to the source and improving page load time for visitors.

Tip: Combine per_page with a filter shortcode attribute to pre-filter and pre-paginate at the same time, giving deep-link destinations that land users exactly where they need to be.

How Do Step 4, Pagination with Sorting and Filtering Work?

Pagination, sorting, and filtering work together through the same AJAX request cycle. When a user sorts a column or applies a filter, TableCrafter resets to page one of the filtered, sorted result set. The "Showing X–Y of Z entries" counter updates to reflect the filtered total, not the full dataset size, so users always know how many records match their current criteria.

On the Free plan, basic text search and column sorting are included alongside pagination. On the Pro plan, advanced filters add dropdown, date-range, multi-select, and lookup-field filter types. These all integrate cleanly with pagination: each filter change triggers a new server-side query and resets to page one.

[tablecrafter id="12" per_page="25" show_per_page_selector="true" show_page_info="true"]

This combination gives visitors the per-page selector, the entry count summary, and full sorting and filtering, a complete self-service browsing experience on a single shortcode line.

What Is Pro: Auto-Refresh and Pagination Together?

Pro

TableCrafter Pro includes an auto-refresh feature that polls for new data at a configurable interval using AJAX. When auto-refresh is active, the table refreshes its current page silently in the background, new entries that fall within the current page's row range appear automatically without any user action.

To enable it, go to the Advanced tab in the table builder and set the Auto-refresh interval in seconds (minimum 10 seconds to avoid hammering the server). The refresh respects whatever page the user is currently on, as well as any active filters or sort order, so it never disrupts navigation mid-browse.

Use case: A dispatch manager monitoring an active loads table can leave the page open and see new driver submissions appear on page one in real time, without reloading. Users browsing page three of historical records are unaffected, the refresh quietly updates that page's slice only.

Auto-refresh pairs well with a moderate per_page value (25–50 rows) so each refresh cycle transfers a small, predictable payload. Avoid combining a very high per-page count with a very short refresh interval on tables with many concurrent viewers, as this multiplies the database query load.

How Does Troubleshooting Common Pagination Issues Work?

Most pagination problems fall into a few categories:

Frequently Asked Questions

How Does Why Pagination Matters for WordPress Tables Work?

When a table renders every entry at once, the browser has to parse and paint potentially thousands of DOM nodes before the user can interact with anything. For tables backed by Gravity Forms entries, which can accumulate quickly in active sites, this becomes a real performance problem. Pagination solves it at the source: the server returns only the rows needed for the current page, keeping the H

What Is TableCrafter?

TableCrafter is a WordPress plugin that turns data from Gravity Forms, Google Sheets, Airtable, Notion, REST APIs, CSV files, and WooCommerce into interactive, sortable, filterable frontend tables. Embed any table on any WordPress page with the [tablecrafter] shortcode or the native Gutenberg block. No PHP or custom development required. The free version supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV and PDF, role-based column visibility, and auto-refresh.

Does this require PHP or developer skills?

No. TableCrafter is configured entirely through the WordPress admin interface. You choose your data source, map fields to columns, and set display preferences using point-and-click controls. Embedding uses the [tablecrafter] shortcode or the native Gutenberg block.

Is the free version sufficient or do I need Pro?

The free plugin on WordPress.org supports CSV, JSON, Google Sheets, and Excel sources with unlimited tables, rows, and columns. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST API sources, inline cell editing, bulk row actions, export to CSV and PDF, role-based column visibility, and auto-refresh every N seconds.

Ready to try it?

TableCrafter is free on WordPress.org. Pro unlocks inline editing, role-based permissions, and advanced data sources.

The permission check runs server-side on every request. Frontend users cannot bypass column restrictions by modifying the HTML or disabling JavaScript, because TableCrafter evaluates the current user's role before the data leaves the server.

The configuration you set here applies to every visitor who loads a page containing this table, regardless of whether they are logged in. Role-specific overrides for columns and rows are a separate layer and do not replace these global display settings. Apply global settings first, then add role restrictions as needed for tables that serve multiple user types.