Collect reviews and ratings on your listings

What you’ll build

By the end of this guide, your signed-in app users will be able to leave a star rating and a written review on your listings — and read everyone else’s, too. Here’s where reviews show up:

  • A reviews summary header on each listing (average rating, total count, latest review date).
  • A reviews list under the listing, with the user’s own review pulled to the top under “My Reviews”.
  • An optional All Reviews screen that browses every review across your app, with geo-filtering and category tabs.

The MAM Reviews Manager plugin (mam-reviews-manager) handles all of this, and turning it on takes no code: you place a few content sections in App Setup and set a handful of options. Everything else — where the rating data comes from, moderation, photos — is just configuration.

Audience: Admin. The standard setup is entirely no-code. If you’re a developer extending the rating source (WooCommerce, GeoDirectory) or the review pipeline, read Where reviews come from (providers) below along with the plugin’s hooks reference.


Before you start

You’ll need:

  • MAM Suite with mam-main activated and an entitlement for mam-reviews-manager. Without that entitlement, the plugin quietly stays off — none of the sections or options below will show up.
  • At least one listing content type in your app. The review sections are registered against the GeoDirectory listing content type (local_app_geodirectory), so reviews attach to listing detail pages out of the box.
  • Listings that app users can reach and a way for them to sign in — review submission requires a logged-in app user.

The reviewable item doesn’t actually have to be a GeoDirectory listing under the hood. For each post, the plugin resolves a provider — the piece of code that decides where that item’s reviews actually live and how they’re stored — and the default provider claims any post type, storing reviews as standard WordPress comments. WooCommerce products and orders, and GeoDirectory listings, can be claimed by their own providers instead, once those sibling plugins are installed. See Where reviews come from (providers).


Step 1 — Add the review sections to your listing page

This is what puts reviews on the listing page itself. The plugin contributes three content section types to the GeoDirectory listing content type — in Mobile App Manager → App Setup, open the content sections for your listing detail screen and add the ones you want, in this order:

Section Section type What it shows
Reviews Header reviews_header Average rating, total number of ratings, latest review date, and the rating distribution.
Reviews reviews The list of reviews. The signed-in user’s own review (if any) is grouped first under “My Reviews”; everyone else’s follows.
Add Review add_review The form for leaving (or editing) a rating, written review, and optional photo.

You don’t have to use all three. A minimal setup is Reviews Header + Add Review; a read-only setup is Reviews Header + Reviews with no Add Review section.

These section types only show up in the picker for the listing content type. If you don’t see them, confirm you’re editing a GeoDirectory listing screen and that the Reviews Manager entitlement is active.


Step 2 — Choose how ratings are captured

A small set of options shapes how the Add Review form behaves. You’ll set them on the standalone Reviews settings screen (Mobile App Manager → Reviews), which Reviews Manager registers once it’s active. The defaults are sensible, so just change what you want different:

Option (admin label) Option key Default Effect
Rating display mam_reviews_rating_type stars How the overall rating is captured and displayed. stars shows a 1–5 star control; numeric shows a numeric badge. The input is always a 1–5 selector.
Require login to review mam_reviews_require_login yes Whether a user must be signed in to leave a review. Submission always requires a logged-in user regardless; this controls the form’s gating in the app.
Allow review photos mam_reviews_allow_photos yes Whether the Add Review form lets the user attach a photo to their review.

If a user already has a review on this listing, the Add Review section automatically switches into edit mode — so they update their existing review instead of posting a duplicate.


Step 3 — Decide your moderation policy

This is where you decide how hands-on you want moderation to be. The New reviews are inserted as setting on the same Reviews settings screen controls whether a submitted review publishes right away or waits for your approval (option tsl-setting-reviews_automatically_approve; the choices are Approved and Pending, and the default is Pending).

  • Approved: the review is published and immediately visible to other users.
  • Pending: the review is held for moderation; you approve it in WordPress like any other comment.

Pair this setting with the app-facing confirmation text, so users know exactly what happened after they hit submit:

App setting When it’s shown
Confirmed Review message (reviews_confirmed_message) After a review is approved and published.
Pending Review message (reviews_pending_message) After submitting a review that’s awaiting approval.

Every submission also returns a generic success message (“Thank you for your review!”). The two settings above let you tailor that messaging to match your moderation choice.

Rate limiting: each app install can submit at most one review per listing per day. Try again sooner and you’ll get a “Too many reviews submitted” error — this limit is built in and isn’t something you can configure from the admin.


Step 4 — (Optional) Add an All Reviews screen

Want users to browse every review across your app, not just the ones on a single listing? Add an All Reviews content screen.

  1. In App Setup, create a new screen (or tab) backed by the All Reviews content type.
  2. There are no extra settings to configure — the content type reports “No settings required.”

The All Reviews screen:

  • Pulls reviews from every registered provider, keyed by listing.
  • Honors your geo-filter settings. With geo-filtering on (tsl-use_geofilters or the geofilter icon), reviews are filtered down to listings within your configured radius (default radius 45, capped by mam_max_radius if set). Turn geo-filtering off, and the radius opens back up so every review comes through.
  • Builds category tabs from each review’s item category and name, plus a “My Reviews” tab for the current user.

Label the surrounding screen using the reviews text settings — also found on the Reviews settings screen — so everything reads naturally:

App setting Purpose
Reviews Title (reviews_title_text) Title at the top of the reviews screen.
My Reviews text (my_reviews_text) Label for the section/button where users see their own reviews.
Link reviews from Home screen to Reviews Screen? (reviews_open_review_screen) When on, tapping a review on the home screen opens the full Reviews screen instead of the underlying listing.

Where reviews come from (providers)

Reviews Manager doesn’t lock review data into one storage backend. For each reviewable post, it resolves down to a single provider — whichever registered provider ranks highest and returns true from supports() for that post:

  • The default provider (priority 0) claims any post type and stores reviews as WordPress comments, with the star rating in the comment’s rating meta and photos in attachment_id meta. This is what runs out of the box.
  • Sibling plugins (for example, GeoDirectory for listings, or WooCommerce for product/order reviews) each register a higher-priority provider (priority 20) via the mam_reviews_providers filter to claim their own post types. When they do, those listings’ reviews — and their aggregate ratings — come from that source instead, so the app shows the same numbers the website does.

As the admin, you don’t need to track any of this: the same three sections and the same options work no matter which provider owns a given listing. Developers adding a new provider work against the MAM_Reviews_Provider interface and MAM_Reviews_Provider_Base (see the plugin’s hooks and codebase docs).


How a submission flows (reference)

Handy to know when you’re troubleshooting a submission:

  1. The app posts the review (rating, text, optional photo, optional tip) to mam-main’s AJAX endpoint with the mam_submit_review subaction.
  2. The handler validates the signed-in user, applies the one-per-day rate limit, finalizes any uploaded photos, and reads the auto-approve setting.
  3. It hands the submission to the provider that owns the target listing, which persists the review and rating.
  4. WooCommerce order reviews (shop_order) additionally fire mam_reviews_add_vendor_review for vendor-specific handling such as tips.
  5. mam_reviews_review_submitted fires after any successful submission.
  6. The response carries the success message and refreshed app data so the listing’s reviews update immediately.

Troubleshooting

  • The review sections don’t appear in App Setup. Confirm mam-reviews-manager is entitled and active, and that you’re editing a GeoDirectory listing screen — the sections are only registered for that content type.
  • Users can’t submit a review. Submission requires a signed-in app user — an unauthenticated request gets rejected. Check your app’s login flow.
  • “Too many reviews” error. The built-in limit is one review per listing per app install per day. Wait and retry.
  • Reviews submitted but not visible. Check the auto-approve setting — with it off, reviews wait in moderation until you approve them in WordPress.
  • Photos don’t attach. Confirm the Allow photos option is on. Only the user’s own fresh temp uploads are accepted; arbitrary media-library items are rejected by design.
  • Numbers don’t match the website. A higher-priority provider (WooCommerce/GeoDirectory) may own those listings. The app reflects that provider’s data; reconcile on the website side.

Verification

This article was drafted against:

  • Plugin: mam-reviews-manager v26.22.0 (Beta 26.23.0)
  • Source: mam-reviews-manager.php, includes/ajax-handler.php, includes/content-sections.php, includes/content-class-all-reviews.php, includes/abstract-mam-reviews-provider-base.php, includes/class-mam-reviews-provider-registry.php
  • App-setting docs: app-setting-docs/reviews/ (reviews_title_text, my_reviews_text, reviews_confirmed_message, reviews_pending_message, reviews_open_review_screen)

  • Plugin: mam-reviews-manager (overview and hooks)
  • Where reviews come from: the reviews provider model (Developer)
  • Set up geo-filtering for location-aware screens
Was this article helpful?
Contents

    Need Support?

    Can't find the answer you're looking for? Don't worry we're here to help!