DESIGN MODULE — CONTENT

WordPress Testimonial Plugin — Star Ratings, Customer Reviews, and Display Grid

Collect customer testimonials with 1 to 5 star ratings, manage them from your WordPress admin, and display them in a responsive grid on any page using a shortcode. A custom database table keeps testimonial data separate from posts, a REST API provides programmatic access, and configurable settings let you control how many testimonials appear and how the grid is laid out.

Star Ratings 1 to 5 stars per testimonial
Custom Database Table wp_testimonials_with_ratings_luperiq_testimonials
REST API Endpoints GET (admin) and POST (public submit)
Admin Pages Dashboard and Testimonials list
Frontend Display Shortcode with grid layout
Settings Display count, grid columns, star toggle

The Problem With Testimonials on Most WordPress Sites

Most WordPress sites handle testimonials in one of two ways. The first approach is pasting customer quotes directly into a page using the block editor. This works until you have more than a handful of testimonials, at which point the page becomes unmanageable. There is no structured data, no star rating, no way to sort or filter, and editing means finding the right text block in a long page layout. The second approach is installing a third-party testimonial plugin that stores data in custom post types, adds its own review schema, and comes with features you do not need — sliders, carousels, popup widgets, and integration with platforms you do not use.

LuperIQ Testimonials With Ratings takes a simpler approach. It stores testimonials in a dedicated custom database table with fields for name, email, rating, title, content, status, and timestamp. You manage testimonials from two admin pages — a dashboard for an overview and a testimonials list for individual management. A shortcode renders approved testimonials in a responsive grid on the front end. Settings control how many testimonials to display, how many columns the grid uses, and whether star ratings are visible. No bloat, no unnecessary features, and no third-party dependencies.

What the Testimonials With Ratings Module Includes

Star Ratings (1 to 5)

Visual Customer Feedback

Every testimonial includes a star rating from 1 to 5. Ratings are stored as integers in the database and rendered visually on the front end. Visitors see at a glance how customers rate your product or service without reading the full text.

Custom Database Table

Structured Testimonial Storage

Testimonials are stored in their own database table (wp_testimonials_with_ratings_luperiq_testimonials) with dedicated columns for name, email, rating, title, content, status, and creation timestamp. This keeps testimonial data clean, queryable, and separate from your WordPress posts and pages.

Admin Dashboard

Overview at a Glance

The dashboard admin page gives you a quick overview of your testimonials. Access it from the LuperIQ menu in your WordPress admin sidebar. The dashboard is your starting point for managing the module.

Testimonials List

Manage Individual Testimonials

The testimonials admin page lists all submitted testimonials with their details. Review new submissions, approve or reject testimonials by toggling status, and manage your entire testimonial library from a single screen.

Shortcode Display

Grid on Any Page

Place a shortcode on any WordPress page or post to render approved testimonials in a responsive grid. The grid adapts to the container width and respects your configured column count and display limit.

REST API

Programmatic Access

Two REST API endpoints under the luperiq/testimonials_with_ratings/v1 namespace let you retrieve testimonials (GET) and submit new ones (POST). The GET endpoint requires manage_options capability for admin-only access. The POST /submit endpoint is intentionally public, allowing anonymous testimonial submissions from site visitors without requiring authentication.

Configurable Settings

Control the Display

A settings page lets you configure three options: the number of testimonials to display on the front end, the number of grid columns, and whether star ratings are enabled. Changes take effect immediately without clearing any cache.

Frontend Assets

Styled Out of the Box

The module enqueues its own CSS and JavaScript files on the front end. Testimonials render with consistent styling across themes. The CSS handles the grid layout, star rating display, and responsive behavior without requiring custom theme code.

AJAX Admin Interactions

Smooth Admin Experience

Admin actions like approving or managing testimonials use AJAX calls with WordPress nonce verification. The interface updates without full page reloads, and all requests are validated for both nonce authenticity and user capability.

Who This Module Is Built For

Any WordPress site that wants to collect and display customer testimonials with star ratings — without installing a bloated third-party plugin or managing testimonials as custom posts.

Service Businesses

  • Collect testimonials from clients and display them on your homepage or a dedicated testimonials page with star ratings.
  • Approve testimonials before they go live so only quality feedback appears on your site.
  • Use the grid layout to show multiple testimonials at once without manually designing a layout in the block editor.

Freelancers and Agencies

  • Build a portfolio page that includes client testimonials with star ratings as social proof.
  • Manage all testimonials from the WordPress admin without editing individual pages.
  • Control how many testimonials display and how many columns the grid uses from a single settings screen.

WordPress Developers

  • Use the REST API to integrate testimonial data into custom themes or headless front ends.
  • The custom database table provides a clean schema that is easy to query directly if needed.
  • No custom post type clutter — testimonials live in their own table and do not pollute the wp_posts table.

Technical Architecture

The module follows a PSR-4 autoloaded class structure under the Luperiq\TestimonialsWithRatings namespace. On first run, the Database\Schema class creates the custom table using WordPress dbDelta. The table stores each testimonial with an auto-incrementing ID, customer name, email, integer star rating, optional title, content text, a status flag for approval control, and a creation timestamp.

The Bootstrap class registers two admin submenu pages under the LuperIQ menu: a dashboard overview and a testimonials list. Admin assets (CSS and JavaScript) are enqueued only on module pages to avoid loading unnecessary resources elsewhere in the admin. The JavaScript is localized with the AJAX URL and a nonce for secure admin interactions.

The REST API controller registers two routes under the luperiq/testimonials_with_ratings/v1 namespace — a GET endpoint to retrieve testimonials (requires manage_options capability) and a POST /submit endpoint to create them (public access, allowing anonymous testimonial submissions from visitors). The Settings\Page class registers three configurable fields: number of testimonials to display, grid column count, and a toggle for star ratings. Frontend CSS and JavaScript are enqueued on all public pages where the shortcode might appear.

Frequently Asked Questions

Where are testimonials stored?

Testimonials are stored in a custom database table (wp_testimonials_with_ratings_luperiq_testimonials), not in wp_posts. The table is created automatically on first activation using WordPress dbDelta. Each row contains the testimonial ID, customer name, email, star rating, title, content, approval status, and creation timestamp.

How do I display testimonials on my site?

Place the module shortcode on any WordPress page or post. The shortcode renders approved testimonials in a responsive grid. The number of testimonials shown and the number of grid columns are controlled from the settings page.

Can I control which testimonials appear publicly?

Yes. Each testimonial has a status field. Only approved testimonials are displayed on the front end. You manage approval from the testimonials admin page.

Does this module require WooCommerce or any other plugin?

No. The module has zero dependencies. It requires only WordPress with LuperIQ installed and active.

Can I turn off star ratings?

Yes. The settings page includes a toggle to enable or disable star rating display on the front end. When disabled, testimonials show the customer name, title, and content without the star visualization.

Is there an API for testimonials?

Yes. The module registers two REST API endpoints under luperiq/testimonials_with_ratings/v1 — GET for retrieving testimonials (requires manage_options capability) and POST /submit for creating them (public access, so visitors can submit testimonials without logging in).

How does this differ from the Testimonials With Ratings v2 module?

This is the original v1 module focused on core testimonial collection and display. It provides a clean, lightweight implementation with a custom database table, admin management, shortcode grid, and REST API. The v2 module builds on this foundation with additional features.

Does the grid layout work with my theme?

The module enqueues its own frontend CSS that handles the grid layout and star rating display. The grid is responsive and adapts to the container width provided by your theme. No custom theme code is required.

Add Star-Rated Testimonials to Your WordPress Site

Collect customer testimonials with star ratings, manage approvals from your admin, and display them in a clean grid on any page. No bloat, no third-party dependencies — just testimonials that work.

See Pricing