DESIGN MODULE — CONTENT
WordPress Customer Testimonials Manager — Social Proof Display and Rating System
Collect star-rated customer testimonials, manage approvals from a dedicated admin dashboard, and display them in a responsive grid on any page using shortcodes. Store testimonials in a custom database table with REST API access, configurable display settings, and frontend submission with optional email verification.
The Problem With Static Testimonials on WordPress
Most WordPress sites handle testimonials by pasting quotes into a page builder block or a text widget. There is no structured data behind the testimonial — no star rating, no approval status, no submission date, and no way for new customers to submit their own. When the business wants to add a new testimonial, someone has to log into WordPress, edit the page, paste the new quote in the right format, and republish. Over time the page becomes a maintenance burden, the formatting drifts, and the testimonials look stale.
Third-party review platforms solve the collection problem but create new ones. Reviews live on someone else's domain. You cannot control the display, you pay for premium widgets, and you depend on an external service staying online. If the platform changes its pricing or shuts down, your social proof disappears.
LuperIQ Testimonials With Ratings gives you a self-hosted testimonials system with a dedicated database table, admin management dashboard, star ratings, approval workflow, configurable display settings, REST API endpoints, and shortcode-based frontend rendering. Testimonials are structured data you own and control, displayed in a responsive grid that works with any theme.
Features for Managing Customer Social Proof at Scale
Star Rating System
1 to 5 Stars on Every Testimonial
Each testimonial includes a numeric star rating from 1 to 5. Ratings are stored as structured data in the database, not as text in a page builder. The frontend grid renders star icons alongside the testimonial content so visitors see quantified social proof at a glance.
Custom Database Table
Dedicated Storage Separate From Posts
Testimonials are stored in a dedicated database table with columns for name, email, rating, title, content, approval status, and creation date. This keeps testimonial data separate from WordPress posts and comments, avoids post table bloat, and makes queries faster as your testimonial count grows.
Admin Dashboard
Central Management Interface
A dedicated admin dashboard inside the WordPress admin gives you a summary view of all testimonials. See total counts, average ratings, recent submissions, and pending approvals without leaving the admin area.
Testimonials List
Review, Approve, and Manage
The testimonials list page shows every submission with its rating, status, author name, and date. Approve or reject testimonials before they appear on the frontend. Filter and sort to find specific testimonials quickly.
Shortcode Display
Responsive Grid on Any Page
Place the testimonial shortcode on any WordPress page or post. The module renders a responsive grid of approved testimonials with star ratings, author names, titles, and content. The grid adapts to your theme and screen size without additional configuration.
REST API Endpoints
Programmatic Access to Testimonials
Two REST API endpoints — GET for retrieving testimonials and POST for creating new ones — provide programmatic access to your testimonial data. Build custom integrations, connect external tools, or create headless frontend displays using the WordPress REST API.
Configurable Display Settings
Control Items Per Page
The settings page lets you configure how many testimonials appear per page in the frontend grid. Set the count to match your layout — 6 for a compact section, 12 for a dedicated testimonials page, or any number that fits your design.
Email Verification
Prevent Spam Submissions
An optional email verification setting requires submitters to verify their email address before a testimonial is accepted. This reduces spam and ensures testimonials come from real people with valid email addresses.
Frontend CSS and JavaScript
Styled and Interactive Out of the Box
The module includes dedicated frontend CSS and JavaScript files that handle star rendering, grid layout, and interactive elements. Styles are scoped to the testimonial shortcode output to avoid conflicts with your theme.
Who This Module Is Built For
Any WordPress site that needs to collect, manage, and display customer testimonials with star ratings — without relying on third-party review platforms or manual page editing.
Service Businesses and Agencies
- Collect client testimonials with star ratings and display them on your homepage, services pages, or a dedicated testimonials page.
- Approve testimonials before they go live so you control what appears on your site.
- Replace static quote blocks with a dynamic grid that updates automatically when you approve new submissions.
E-Commerce and Product Sites
- Display customer satisfaction ratings alongside product pages or landing pages to increase buyer confidence.
- Use the REST API to pull testimonials into custom storefronts, product carousels, or marketing email templates.
- Store testimonial data in a dedicated table that does not interfere with WooCommerce product or order data.
Developers and Site Builders
- Use the REST API endpoints to integrate testimonial data into headless or decoupled WordPress architectures.
- Configure display settings per site without editing theme templates or writing custom queries.
- Deploy a testimonials system with structured database storage that is easy to migrate, export, and back up.
Technical Architecture
The module follows a PSR-4 autoloaded namespace structure under Luperiq\TestimonialsWithRatings2. The Bootstrap class registers two admin pages — a dashboard and a testimonials list — under the LuperIQ Wisdom admin menu. Admin assets (CSS and JavaScript) are enqueued only on module pages to avoid loading unnecessary resources on other admin screens.
The Database\Schema class creates a custom table on first activation using WordPress dbDelta. The table stores each testimonial as a row with columns for ID, name, email, rating (integer 1 to 5), title, content, status (approval flag), and created_at timestamp. This is a separate table from any v1 testimonials installation, so both versions can coexist during migration.
The Api\RestController class registers two REST API routes under the luperiq/testimonials_with_ratings/v1 namespace: a GET endpoint for retrieving testimonials and a POST endpoint for creating new ones. Both endpoints require the manage_options capability by default, ensuring only authorized users can access testimonial data through the API.
The Settings\Page class registers a WordPress settings section with two fields: testimonials per page (numeric, default 12) and email verification toggle (checkbox). The Shortcodes\Register class adds a shortcode that renders testimonial data on the frontend. Frontend CSS and JavaScript are enqueued on all public-facing pages where the shortcode is used, handling star icon rendering, grid layout, and AJAX interactions.
Related Testimonial Modules
Testimonial Display
Star ratings, customer reviews, and display grid.
Explore the full feature set and integration details.
Frequently Asked Questions
How is this different from the v1 Testimonials module?
Version 2 uses a separate database table with an improved schema, a dedicated admin dashboard, REST API endpoints, configurable settings, and email verification. Both versions can run simultaneously during migration because they use different database tables.
Do testimonials appear automatically after submission?
No. Each testimonial has a status field that defaults to pending. You review submissions in the admin testimonials list and approve them before they appear on the frontend. This gives you full control over what visitors see.
Can visitors submit testimonials from the frontend?
Yes. The shortcode output includes a submission interface where visitors enter their name, email, star rating, title, and testimonial text. Submissions are saved to the database with a pending status and appear in your admin list for review.
Does the star rating affect search engine results?
The module stores ratings as structured data. You can extend the shortcode output to include Schema.org Review markup, which search engines can use to display star ratings in search results. The structured database storage makes it straightforward to generate aggregate rating data.
How many testimonials can the module handle?
Testimonials are stored in a dedicated MySQL table, not as WordPress posts. The table structure supports thousands of testimonials without affecting WordPress post query performance. Display pagination is controlled by the testimonials-per-page setting.
Can I customize the grid layout?
The frontend grid is rendered by the module's CSS file and adapts to your theme's content width. You can override styles in your theme's stylesheet or use a child theme. The grid uses responsive breakpoints so it works on desktop, tablet, and mobile screens.
Is the REST API accessible to unauthenticated users?
By default, both REST API endpoints require the manage_options capability, which means only WordPress administrators can access them. You can adjust the permission callback in your own code if you need public read access.
What data is stored for each testimonial?
Each database row contains: auto-incrementing ID, author name, author email, star rating (1 to 5), testimonial title, testimonial content, approval status, and creation timestamp.
Start Collecting Customer Testimonials on Your WordPress Site
Activate the Testimonials With Ratings module, place the shortcode on any page, and start building a library of star-rated social proof that you own and control.
