DaveyBear
DaveyBear

Reputation: 63

How to display Woo Commerce reviews using a shortcode?

I am building a custom product page with WYSIWYG tool for WooCommerce. For CRO sake I want to include the reviews towards the bottom of the page.

I already disabled the tabs (reviews, description) and I'll add custom content in the middle and reviews at the bottom.

I already found a way to display reviews (credit: https://www.businessbloomer.com/woocommerce-display-product-reviews-custom-page-shortcode/)

add_shortcode( 'product_reviews', 'bbloomer_product_reviews_shortcode' );
 
function bbloomer_product_reviews_shortcode( $atts ) {
    
   if ( empty( $atts ) ) return '';
 
   if ( ! isset( $atts['id'] ) ) return '';
       
   $comments = get_comments( 'post_id=' . $atts['id'] );
    
   if ( ! $comments ) return '';
    
   $html .= '<div class="woocommerce-tabs"><div id="reviews"><ol class="commentlist">';
    
   foreach ( $comments as $comment ) {   
      $rating = intval( get_comment_meta( $comment->comment_ID, 'rating', true ) );
      $html .= '<li class="review">';
      $html .= get_avatar( $comment, '60' );
      $html .= '<div class="comment-text">';
      if ( $rating ) $html .= wc_get_rating_html( $rating );
      $html .= '<p class="meta"><strong class="woocommerce-review__author">';
      $html .= get_comment_author( $comment );
      $html .= '</strong></p>';
      $html .= '<div class="description">';
      $html .= $comment->comment_content;
      $html .= '</div></div>';
      $html .= '</li>';
   }
    
   $html .= '</ol></div></div>';
    
   return $html;
} 

Problem now Now I'd like to edit the shortcode so it's possible to pull /display also the total avg product rating (and possibly a form, but for that I can just like to a different review submission page).

Upvotes: 2

Views: 14979

Answers (1)

Bhautik
Bhautik

Reputation: 11282

for count total average you have to count the total number of reviews and calculate the total number of ratings. then divided ratings/reviews. check my below code

add_shortcode( 'product_reviews', 'product_reviews_shortcode' );

function product_reviews_shortcode( $atts ) {
    
   if ( empty( $atts ) ) return '';
 
   if ( ! isset( $atts['id'] ) ) return '';
       
   $comments = get_comments( 'post_id=' . $atts['id'] );
   
   $total_comments = count( $comments );
   
   if ( ! $comments ) return '';
   
   $total_rating = 0;

   $html .= '<div class="woocommerce-tabs"><div id="reviews"><ol class="commentlist">';
    
   foreach ( $comments as $comment ) {   
      $rating = intval( get_comment_meta( $comment->comment_ID, 'rating', true ) );
      $total_rating = $total_rating + $rating;
      $html .= '<li class="review">';
      $html .= get_avatar( $comment, '60' );
      $html .= '<div class="comment-text">';
      if ( $rating ) $html .= wc_get_rating_html( $rating );
      $html .= '<p class="meta"><strong class="woocommerce-review__author">';
      $html .= get_comment_author( $comment );
      $html .= '</strong></p>';
      $html .= '<div class="description">';
      $html .= $comment->comment_content;
      $html .= '</div></div>';
      $html .= '</li>';
   }
    
   $html .= '</ol></div></div>';
    
    if( $total_rating > 0 ) {
       $total_average = $total_rating / $total_comments;
       $total_average =  number_format($total_average, 2, '.', '');
    }

   return $html;
}

Upvotes: 1

Related Questions