Show the "ratingValue" and "ratingCount" values ​of KK Star Ratings Plugin

I want to display the "ratingValue" and "ratingCount" values ​​generated by the KK Star Ratings plugin (Github).

I made a JSON-LD SoftwareAplication and here is the code I use in function.php:

add_action('wp_head', 'add_jsonld_head', 1);
function add_jsonld_head() {
    if ( is_single() ) {
        ?
        script type="application/ld+json"
            {
      "@context": "http://schema.org/",
      "@type": "SoftwareApplication",
      "@id": "?php echo get_permalink( get_option( 'page_for_posts' ) ); ?",
      "softwareVersion": "?php the_field('versi_terbaru'); ?",
      "operatingSystem": "Windows",
      "applicationCategory": "?php the_field('kategori'); ?",
      "dateModified": "?php the_modified_time('c'); ?",
      "name": "?php the_title(); ?",
      "aggregateRating": {
        "@type": "AggregateRating",
        "name": "?php the_title(); ?",
        "ratingValue": "",
        "ratingCount": "",
        "bestRating": "5",
      },
      "publisher": {
        "@type": "organization",
        "name": "?php the_title(); ?"
      },
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "IDR"
      },
      "image":{
        "@type": "ImageObject",
        "url": "?php the_post_thumbnail_url(); ?",
        "width": "100",
        "height": "100"
      }
    }
        /script
        ?php
    }
} 

How do I get the ratingValue and ratingCount values ​​from KK Star Ratings?

I have played around with this plugins but sadly my coding skills are not that good so I couldn't figure out how to modify it. I would really appreciate any help I can get on this.

Topic rating json post-meta plugins Wordpress

Category Web


This is the code I used:

$best  = get_option('kksr_stars');
$score = get_post_meta(get_the_ID(), '_kksr_ratings', true) ? ((int) get_post_meta(get_the_ID(), '_kksr_ratings', true)) : 0;
$votes = get_post_meta(get_the_ID(), '_kksr_casts', true) ? ((int) get_post_meta(get_the_ID(), '_kksr_casts', true)) : 0;
$avg = $score && $votes ? round((float)(($score/$votes)*($best/5)), 1) : 0;

Call:

<?php echo $avg; ?>
<?php echo $votes; ?>    

Here is what I found that might help you. I did some test by myself and here is snippets for you to use. Add the following code to functions.php file:

//Getter methods

//this will return the base best score like 5 or 10.
function get_best_rating(){
    return max((int) get_option('kksr_stars'), 1);
}


//This will return the rating vote count
function get_rating_count($id){
    return count_filter(null, $id, null);
}

//This will return the rating score value
function get_rating_score($id){
    return score_filter(null, $best, $id, null);
}

//Helper Functions
function count_filter($count, $id, $slug){
    if ($slug) {
        return $count;
    }

    $count = (int) get_post_meta($id, '_kksr_casts', true);

    return max($count, 0);
}

function score_filter($score, $best, $id, $slug){
    if ($slug) {
        return $score;
    }

    $count = count_filter(null, $id, null);
    $counter = (float) get_post_meta($id, '_kksr_ratings', true);

    if (! $count) {
        return 0;
    }

    $score = $counter / $count / 5 * $best;
    $score = round($score, 1, PHP_ROUND_HALF_DOWN);

    return min(max($score, 0), $best);
}

Now you can call the getter function like this:

$best = get_best_rating();
$count = get_rating_count(get_the_id()); //You must provide post id as param
$score = get_rating_score(get_the_id()); //You must provide post id as param

Let me know if it helps you.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.