WP-PostRatings
WP-PostRatings

WP-PostRatings

4.3/5 (179 ratings) 30K+ active installs Updated Aug 10, 2026
Ratings -> Settings: the shape, the scale, who may rate, and how a repeat is spotted

Ratings -> Settings: the shape, the scale, who may rate, and how a repeat is spotted

WP-PostRatings adds a rating control to any post, page or custom post type. Visitors pick a value, the vote is posted in the background, and the result appears in its place without a page load.

Features

  • Nine rating shapes, drawn with CSS rather than shipped as images, so they stay sharp at any size and cost no HTTP requests.
  • A scale, or a two-way up/down control, with the rated and unrated colours as settings.
  • Template tags and a shortcode for the highest rated, most rated, lowest rated and highest scoring posts, optionally within a category, a tag or a time range.
  • A rating log with sortable columns, filters, bulk delete and Screen Options.
  • Google rich snippet markup for the post and its aggregate rating.
  • A sidebar widget, and a section on the WP-Stats page when that plugin is installed.

Donations

I spent most of my free time creating, updating, maintaining and supporting these plugins, if you really love my plugins and could spare me a couple of bucks, I will really appreciate it. If not feel free to use it without any obligations.

Usage

The simplest way, and the only one that works in a block theme without editing template files, is the shortcode. Put it in the post or page you want rated:

  • [ratings] rates the post it appears in.
  • [ratings id="1"] shows the rating for post 1, wherever you put it.
  • [ratings id="1" results="true"] shows post 1’s result without letting anyone vote from there.

To put ratings on every post automatically, a classic theme can call the template tag from single.php, archive.php or index.php, anywhere inside the loop:

<?php the_ratings(); ?>

The settings live at WP-Admin -> Ratings -> Settings, which has a Settings tab and a Templates tab.

Showing A Rating In A Block

A Ratings block is available in the editor, under Widgets. Two settings in the sidebar:

  • Post ID — leave it at zero to rate the post the block sits in, which is what an empty [ratings] does, or give an id to show another post’s rating wherever you put the block.
  • Show the result only — displays the rating without offering to change it, for putting a post’s score somewhere it should not be voted from. This is what results="true" does.

It renders on the server, so the preview in the editor is the real rating rather than an approximation, and changing your shape, colours or templates updates every post showing it without re-saving anything. The preview is deliberately not clickable: rating from the editor would record a real vote.

The shortcode still works and is not going anywhere. [ratings], [ratings id="1"] and [ratings id="1" results="true"] behave exactly as they always have, and a post already containing one needs no change. The block calls the same code the shortcode calls, so the two render identically — use whichever suits the post.

WP-CLI

wp postratings list
wp postratings list --limit=50 --format=json
wp postratings get 42
wp postratings delete 42 --yes
wp postratings delete --all --what=logs

A rating lives in two places — the running totals each post displays, and a row per vote in the log. --what chooses which to clear: logs, data or both, and both is the default.

REST API

GET  /wp-json/postratings/v1/post/<id>
POST /wp-json/postratings/v1/post/<id>/rate

Reading is public, because a rating is public. Rating takes the same wp_postratings_<id>-nonce the rendered control already carries, passed as a nonce parameter, and is subject to the same eligibility and repeat-rating settings as rating through the page.

Each response carries the rendered markup as well as the numbers, because your templates and your chosen shape decide what a rating looks like.

A refusal answers 403, not 400 — a rating already cast, a rating off the end of the scale, a bad nonce. 400 is kept for a parameter this plugin never had a chance to look at, and a post that does not exist is 404.

These routes are an addition. The admin-ajax.php wp_postratings action is unchanged and still supported.