This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

Clean Testimonials


Have a feature request?

Sweet! Feature requsts on Github:

Want to contribute?

Clean Testimonials on Github:

Clean Testimonials enables you to easily and quickly add Testimonials to your WordPress website. The plugin integrates seamlessly with your existing WordPress admin area, so you will feel right at home.

There are a few simple ways to manage your testimonials:

  1. Easy to use shortcodes when editing content in the WordPress admin area.
  2. The built-in Testimonial Widget to display a specific or random testimonial
  3. PHP code if you are a developer (see FAQ).

This plugin is in constant development. If you have any feature requests or questions, please feel free to submit them via the support forum.


  • Creates a “Testimonials” link in your WordPress admin area which allows you or your visitors to submit Testimonials.
  • Leverages the simplicity of WordPress shortcodes, allowing you to easily display your Testimonials wherever you like (see FAQ for individual shortcodes).
  • Categorize Testimonials any way you see fit and display those categories wherever you like.
  • Creates a Testimonial Widget which allows you to display your testimonials in sidebar or widgetized areas.
  • Display random testimonials using either a shortcode or the built-in widget.
  • Ships with CAPTCHA support, but you can turn it off if you like
  • Allows your visitors to upload a thumbnail with their testimonial.
  • Allows your visitors to choose whether their contact details are displayed with their testimonials.
  • Allows powerful customizations for developers.
  • Setup for translation, so if you’re a translator, get translating!
  • Supports WP-Paginate if installed.

Please Note: Although any output Clean Testimonials generates is well structured, no styling is shipped out of the box. This means it is up to your theme to decide how the output will be styled.

If you have found this plugin useful, consider taking a moment to rate it, or perhaps even a small donation.


  • An overview of the Testimonials menu
  • Editing or creating a Testimonial in the backend
  • Managing Testimonial categories
  • Example use of the [testimonials] shortcode. This will display all testimonials with pagination
  • Example use of the [testimonial-submission-form] shortcode. This shortcode will turn this page into a Testimonial submission page for your users


  1. Upload the clean-testimonials folder to the /wp-content/plugins/ directory
  2. Activate the plugin through the ‘Plugins’ menu in WordPress


Can testimonials be submitted by my visitors automatically?

Yes. On top of your ability to add and edit testimonials in the WordPress admin area, you can also use a shortcode to display a form on any page you like. This form will create a new testimonial when a user fills it out. The shortcode to do this is [testimonial-submission-form]

When a user submits a testimonial, it will default to “Draft” status. You will need to publish any testimonials this way before they will display on your site. Just in case someone writes anything naughty!

How do I display all of my testimonials?

To display all testimonials with pagination, use the [testimonials] shortcode.

How do I display a testimonial?

To display a single testimonial you can use the [testimonial id=”xyz”] shortcode, where “xyz” is the ID of the testimonial you wish to display.
You can copy and paste the testimonial shortcode complete with ID from your Testimonials admin page in WordPress.

How can I display a category of testimonials?

To display a category of testimonials (with pagination!), you can use the [testimonials category=”xyz”] shortcode. where “xyz” is the ID of the testimonial category you wish to display.
You can also display testimonials from multiple categories by using [testimonials category=”xyz,abc”] where “xyz” is the first ID and “abc” is the second. You can pass in as many ID’s as you like, just separate them with commas.

You can copy and paste this shortcode complete with ID from the Testimonials -> Categories admin page in WordPress.

Can I display a random testimonial?

Yes, you can use the Testimonial Widget and specify the “random” option, or you can use the [testimonial id=”random”] shortcode.

Can I change the number of testimonials shown per page?

Yes. Specify the “per_page” attribute when using the [testimonials] shortcode. EG, [testimonials category=”10″ per_page=”5″].

Available filters

The following filters are available in Clean Testimonials so you can customise it to your liking.

  1. new_testimonial_notification – Filter whether an email notification should be sent to the administrator when a new testimonial is submitted.
  2. new_testimonial_email – Filter which email address which the new testimonial notification email is sent to. Defaults to administrator email.
  3. new_testimonial_confirmation_message – Filter the text which is displayed when a new testimonial is received.
  4. new_testimonial_failure_message – Filter the text which is displayed when a testimonial submission fails.
  5. ct_disable_captcha – Return true to disable captcha on the testimonial submission form
Available actions

The following actions are available in Clean Testimonials so you can customise it to your liking.
1. ct_before_render_testimonial – Fires before a testimonial is rendered. Passes in $testimonial and $context
1. ct_after_render_testimonial – Fires after a testimonial is rendered. Passes in $testimonial and $context

I am a developer, what can you tell me?

The following information might be handy for you to know.

  1. Testimonials operate via a custom post type which is simply named “testimonial”.
  2. Testimonials are grouped in a custom taxonomy named “testimonial_category”.
  3. The Testimonial widget class name is “Testimonial_Widget” and of course extends WP_Widget.


September 3, 2016 1 reply
This breaks Wordpress. Do not download before newer update arrives!
Read all 21 reviews

Contributors & Developers

“Clean Testimonials” is open source software. The following people have contributed to this plugin.


Translate “Clean Testimonials” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.


  • Removed developer output from [testimonials] shortcode


  • Added translation support.
  • Added filter “ct_disable_captcha” to allow disabling captcha.
  • Multiple categories can now be passed in a shortcode. EG, [testimonials category=”34,87,33″ per_page=”25″].
  • Added a one donation donation/rating request. Enjoying this free plugin? Please show some one time love!
  • Updated PayPal donation address in readme


  • Added ct_pre_render_testimonial, ct_render_testimonial and ct_after_render_testimonial hooks.
  • ct_pre_render_testimonial is a filter which allows a developer to completely override how a testimonial looks.
  • ct_render_testimonial is a filter which allows a developer to filter the default testimonial styling before Clean Testimonials outputs it.
  • ct_after_render_testimonial is an action which triggers every time a testimonial is rendered, allowing you to perform your own actions afterwards.
  • Added ‘context’ parameter to each testimonial render (including the above hooks). This allows a developer further flexibility in how a testimonial should be rendered.
  • Minor tweak to the testimonial cycle code
  • The testimonial cycle AJAX request now takes ‘context’ and ‘word_limit’ as a parameter

Props to @ericdaams for this release!


  • Simple maintenance release. No functionality change.


  • Fixed bug causing testimonial widget to display a PHP warning when no random categories were selected


  • Introduced new filters to customize testimonial submission behaviour. See FAQ.
  • Added filter to customize CAPTCHA theme. EG, red (default), white, blackglass or clean. See FAQ.
  • Added ability to specify ordering in the [testimonials] shortcode. EG, [testimonials category=”5″ order=”date” orderby=”desc”]
  • Added shortcode attribute to allow basic AJAX powered random testimonial cycling


  • Bug fixes. Woops!


  • An email notification is now sent to the site owner when a new testimonial is submitted
  • The Testimonial Widget “random” option now allows you to specify source categories if you wish
  • Added “word_limit” attribute to [testimonial] and [testimonials] shortcodes, allowing you to truncate long testimonials if you wish


  • Fixed bug causing testimonial submission form to appear incorrectly


  • Fixed bug causing Testimonials submitted via the template submission form to be saved as incomplete


  • Added CAPTCHA to testimonial submission form


  • Added “per_page” attribute to [testimonials] shortcode which allows you to specify how many testimonials to display per page. EG, [testimonials category=”25″ per_page=”5″]. Default is 2
  • Fixed small PHP warning which could be generated when testimonial pagination is rendered


  • When displaying a testimonial, the comma separating the client name and company name will no longer be displayed if the company name is not set


  • Fixed output positioning of shortcode data


  • Small security updates


  • Fixed bug causing Featured Images (thumbnails) to not appear on the Testimonial edit page
  • Added Testimonial Widget
  • Changed [testimonial] shortcode to accept “random” as an ID which, in turn, outputs a random testimonial


  • Enhancements and bug fixes


  • Initial release of plugin