nieman_0,
This is not currently a built in feature of the plugin, however, this could be done very simply utilizing just the query aspects from the existing shortcodes. For, example the aggregate review
queries reviews from the DB based on the parameters passed to the shortcode, and returns these reviews in an array. simply using the php count()
function on this array would give you the number of reviews that you are looking for. (For example: <?php $review_count = count($reviews); ?>
). You could very easily pull the query construction out of the the aggregate snippet shortcode function and wrap it in your own function call to make it more accessible. I hope this helps.
Thanks,
Charlie Maxwell
[NM_Developer]
niemand_0,
This is not currently a built in feature of the plugin, however, this could be done very simply utilizing just the query aspects from the existing shortcodes. For, example the aggregate review
queries reviews from the DB based on the parameters passed to the shortcode, and returns these reviews in an array. simply using the php count()
function on this array would give you the number of reviews that you are looking for. (For example: <?php $review_count = count($reviews); ?>
). You could very easily pull the query construction out of the the aggregate snippet shortcode function and wrap it in your own function call to make it more accessible. I hope this helps.
Thanks,
Charlie Maxwell
[NM_Developer]
Perfect, thank you Charlie!
After digging into this some I think I need some more guidance.
What function in particular is returning an array of the reviews? Do I have access to this function in my template file?
niemand_0,
Yes so as long as you are calling the functions from a location that will run after plugins have been loaded you should be able to access the global Rich Reviews instance. So the plugin loads an instance of the Rich Reviews controller class to the global variable $richReviews
. Further, the easiest way to access the data you’re looking for would be through the DB query function used for the snippet. This function requires a category argument, and a post object argument. If you want to count all reviews regardless of category, you can pass 'any'
as the first argument. Then since you are going to be using this inside of a template file, I assume you will be counting the reviews submitted on the current page, so you should just be able to access the global $post
and pass that as the post argument. This will return an array of data in the following format:
Array (
['average'] => AVERAGE,
['reviews_count'] => COUNT,
['category'] => CATEGORY
);
I would recommend wrapping any code using the $richReviews
global in existence checks to avoid your site being white-screened in the case that the plugin is not present. However, this should more or less be the code that you are looking for.
<?php
// call the needed global vars
global $richReviews, $post;
var $reviewData = $richReviews->db->get_average_rating('any', $post);
$reviewCount = $reviewData['reviewsCount'];
// $reviewsCount is now a String representation of the number of reviews submitted for this page.
?>
Oh awesome, I didn’t realize I had access to the richReviews instance in my template files.
Ok, so I have that code in place but for some reason it’s returning with a count of zero reviews (even though I have three approved reviews on that page).
Here’s my code:
global $richReviews;
$reviewData = $richReviews->db->get_average_rating('any', $post);
$reviewCount = $reviewData['reviewsCount'];
print_r($reviewData);
which prints out
Array
(
[average] => 0
[reviewsCount] => 0
[category] => any
)
Any thoughts?
niemand_0,
My fault, you will want to pass the category argument of ‘all’ instead of ‘any’.
So.
global $richReviews;
$reviewData = $richReviews->db->get_average_rating('all', $post);
$reviewCount = $reviewData['reviewsCount'];
print_r($reviewData);
Should do the trick
Further, if you only want the reviews submitted through a form on this page, you should pass the category parameter of ‘post’ instead of ‘all’.