Dynamic stars rating from plugin for Bricks rating element

Hi

if you want to use a dynamic data tag {kk_star-rating} for the rating, you can use this code:

add_filter( 'bricks/dynamic_tags_list', 'add_starrating_tag_to_builder' );
function add_starrating_tag_to_builder( $tags ) {
  // Ensure your tag is unique (best to prefix it)
  $tags[] = [
    'name'  => '{kk_star-rating}',
    'label' => 'kk Star Rating',
    'group' => 'My Dynamic Data Group',
  ];

  return $tags;
}
add_filter( 'bricks/dynamic_data/render_tag', 'get_starrating_tag_value', 20, 3 );
function get_starrating_tag_value( $tag, $post, $context = 'text' ) {
  // $tag is the tag name with the curly braces after priority 10
  // Only look for dynamic tag my_dd_tag
  if ( $tag !== '{kk_star-rating}' ) {
    return $tag;
  }

  // Do your custom logic here, you should define run_my_dd_tag_logic() function
  $value = run_rating_dd_tag_logic();

  return $value;
}

 function run_rating_dd_tag_logic() {
  // Do your custom logic here
  
  $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;
  $my_value = $avg;
  return $my_value;
}

add_filter( 'bricks/dynamic_data/render_content', 'render_kkstar_rating', 20, 3 );
add_filter( 'bricks/frontend/render_data', 'render_kkstar_rating', 20, 2 );
function render_kkstar_rating( $content, $post, $context = 'text' ) {

  // $content might consists of HTML and other dynamic tags
  // Only look for dynamic tag {my_dd_tag}
  if ( strpos( $content, '{kk_star-rating}' ) === false ) {
    return $content;
  }
 
  // Do your custom logic here, you should define run_my_dd_tag_logic() function
  $my_value = run_rating_dd_tag_logic();
 
  // Replace the tag with the value you want to display
  $content = str_replace( '{kk_star-rating}', $my_value, $content );

  return $content;
}

Put this into the functions.php file or use a code snippet plugin.

Then you can just use the rating field like this:

stars4

Cheers

Patric

4 Likes