How to Show Only a User's Own Gravity Forms Entries in a Table

Updated July 2026 • 6 min read • By Fahad Murtaza

TableCrafter table builder, connect Gravity Forms, Google Sheets, Airtable, CSV, or JSON data sources
TableCrafter table builder, connect Gravity Forms, Google Sheets, Airtable, CSV, or JSON data sources

One of the most requested patterns in member-site and client-portal WordPress builds is showing each logged-in user a table of only their own form submissions. TableCrafter handles this with a single toggle, no custom PHP, no query filters, no separate plugin. Here is how to set it up correctly and what to watch out for. 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, and no per-row limits on the free tier. 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 the native Gutenberg block. WordPress sites with interactive tables see 31% longer average session durations (Semrush, 2024).

Why This Matters for Member Sites?

Without user-scoped filtering, every visitor to a shared table page would see every submission from every user. For anything sensitive, order history, support tickets, intake forms, application status, that is a data exposure problem. It also creates a confusing UX: a user with three submissions should not have to scroll past three thousand other people's records to find their own.

Gravity Forms itself stores the WordPress user ID on every authenticated submission in the created_by column of wp_gf_entry. TableCrafter reads this column and applies a WHERE created_by = current_user_id() constraint when the option is enabled. No data is sent to the browser and then filtered client-side, the filter happens at query time.

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.

What Is Prerequisite: Logged-In Submission Capture?

This feature only works for entries that were submitted by a logged-in WordPress user. If your Gravity Form is publicly accessible and allows guest submissions, those guest entries have created_by = 0 and will never appear in a user-scoped table, regardless of whether the submitter's email matches. This is by design.

If you need to match guest submissions to a user retroactively, that requires a custom migration script and is outside TableCrafter's scope.

How Do I Enable the Current User Filter?

Open the table configuration for your Gravity Forms-sourced table in TableCrafter > Tables > [Your Table] > Edit. Scroll to the Access & Visibility section. You will see a checkbox labeled Show only current user's entries. Enable it and save.

That is the entire configuration step. The shortcode itself does not need to change:

[tablecrafter id="1"]

The filter is stored in the table configuration, not in the shortcode. This means you cannot accidentally expose all entries by copy-pasting the shortcode somewhere else, the scope restriction travels with the table config.

Admin override: By default, users with the manage_options capability (WordPress Administrators) see all entries regardless of the current-user filter. This lets admins use the same table to review any user's submissions. You can disable this admin override in Access & Visibility > Admin sees all entries if you want strict per-user isolation for all roles including admins.

What Happens to Unauthenticated Visitors?

When the current-user filter is enabled and a visitor who is not logged in reaches the page, TableCrafter displays an empty table with the message "Please log in to view your entries." You can customize this message under TableCrafter > Settings > Messages > Not Logged In Message.

A better pattern for most sites is to restrict the page itself to logged-in users using WordPress's built-in page visibility settings, a membership plugin, or a plugin like Members. That way unauthenticated visitors see a login page rather than an empty table. TableCrafter's empty-table message is a last-resort fallback, not the recommended gate.

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.

What Is the Shortcode Parameter Approach?

If you need to control the scope at the shortcode level rather than in the table configuration, for example, you want the same table config to display differently on two different pages, you can pass the parameter directly:

[tablecrafter id="1" current_user="true"]

This shortcode parameter overrides the table config setting in both directions. If the config has the filter off but you add current_user="true" to the shortcode, the filter is applied. If the config has it on but you pass current_user="false", all entries are shown. Use this carefully, passing current_user="false" on a public page exposes all entries to all visitors.

This step completes the connection between your data source and the TableCrafter table engine. Once saved, the plugin caches the connection credentials in the WordPress options table and uses them on every subsequent page load. If you update the source configuration later — for example, rotating an API key or changing a sheet URL — return to this step, enter the new value, and save again. The table updates immediately on next load without any shortcode changes.

What Is Role-Based Scoping: Mixed Visibility Tables?

A common pattern in client portals is: subscribers see only their own entries, editors see all entries. TableCrafter handles this with the role-based visibility override in Access & Visibility > Role Overrides.

Set up the overrides like this:

  1. Enable Show only current user's entries (this becomes the default for all roles).
  2. Under Role Overrides, click Add Role Override.
  3. Select Editor from the role dropdown.
  4. Set the override action to Show all entries.
  5. Repeat for the Administrator role if you also unchecked the automatic admin override.

Now subscribers see only their own rows, editors and administrators see everything, all from the same shortcode on the same page.

If this step produces unexpected output, check the source data directly in the connected system. TableCrafter passes data through without modification — if a cell displays an unexpected value, the source record contains that value. Use the TableCrafter debug log (Settings > Advanced > Debug Mode) to trace the exact query sent to the source and the raw response received, which narrows the diagnosis to either a source-side or rendering-side issue.

How Do I Display the Username or User Info in the Table?

In a user-scoped table, showing the current user's own name or email as a column is usually redundant. But in a mixed-visibility table (where admins see all entries), it is essential. TableCrafter adds two virtual columns you can drag into the column builder for any Gravity Forms table:

These virtual columns pull from wp_users via a JOIN on created_by. They are read-only and cannot be edited inline.

The shortcode accepts all column and filter settings defined in the table builder as defaults, but you can override individual parameters inline. For example, `[tablecrafter id="1" per_page="25"]` overrides the default rows-per-page setting for this specific embed without changing the saved table configuration. This lets you reuse one table definition across multiple pages with different display requirements.

What Are the Common Use Cases?

Application Status Portal

A user submits a job application via Gravity Forms. Your admin team updates the status field (via inline editing with editor-role access). The applicant logs in and sees their application with the current status. One table config, two different views based on role.

Order or Booking History

A booking form collects reservation details. Each customer sees only their own bookings, sorted by date descending. Adding a date-range filter lets them narrow to a specific trip or season.

Support Ticket Log

Users submit support requests via GF. A current-user table on the dashboard shows open tickets, their status, and the last reply date. The support team uses a separate, unscoped table in the admin area.

This configuration interacts with any caching or CDN layer active on your WordPress installation. If you use WP Rocket, LiteSpeed Cache, or a CDN such as Cloudflare, flush the page cache after making this change to ensure the updated configuration is reflected in the cached HTML served to visitors. TableCrafter's server-side output is regenerated on the next uncached request.

How Does Testing Your Configuration Work?

Always test user-scoped tables with a dedicated test account at the subscriber role, not your admin account, since admins bypass the filter by default. Create a WordPress user at the Subscriber role, submit a test entry under that account, then visit the table page while logged in as that subscriber. You should see exactly one row.

Then log out and visit the same page. You should see the "please log in" message or be redirected, depending on how you have gated the page.

After completing this step, verify the result by viewing the page as a logged-out visitor in an incognito window. This confirms the table behaves correctly for public visitors rather than reflecting admin-level permissions that may hide configuration issues during initial setup. Check both the rendered output and the browser console for any JavaScript errors.

What Are the Next Steps?

With per-user filtering in place, the next logical enhancement is inline editing, letting users update their own entries from the same table they use to view them. Combine the current-user filter with TableCrafter's role-based edit permissions, and subscribers can edit their own rows while admins can edit any row, all on the same page.

Frequently Asked Questions

How Does Why This Matters for Member Sites Work?

Without user-scoped filtering, every visitor to a shared table page would see every submission from every user. For anything sensitive, order history, support tickets, intake forms, application status, that is a data exposure problem. It also creates a confusing UX: a user with three submissions should not have to scroll past three thousand other people's records to find their own.

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.