Get Needed Additional Reviews

PHOTO EMBED

Wed Oct 04 2023 13:10:32 GMT+0000 (Coordinated Universal Time)

Saved by @hasan1d2d

// use of shortcode: [cp_reviews url="https://wordpress.org/support/plugin/location-weather/reviews/" target="4.5"]
add_shortcode(
	'cp_reviews',
	function( $atts, $content ) {
		$a = shortcode_atts(
			array(
				'url'  => 'https://wordpress.org/support/plugin/post-carousel/reviews/',
				'target' => '4.78',
			),
			$atts
		);
		$url = $a['url'];
		
		
		$cp_review_info = get_transient( 'cp_review_info_' . md5($url) );
		if ( $cp_review_info ) {
			$reviews = $cp_review_info[0]; 
			$averageReview = $cp_review_info[1]; 
			$totalReviews = $cp_review_info[2];
		} else {
			
			$params = array(
				'timeout'   => 101,
				'sslverify' => true,
			);

			$raw = wp_remote_retrieve_body( wp_remote_get( $url, $params ) );
			if ( strpos( $raw, 'class="review-ratings">' ) !== false ) {	
				$raw = explode( 'class="review-ratings">', (string) $raw )[1];
			}
			if ( strpos( $raw, '<div class="col-5">' ) !== false ) {
				$raw = explode( '<div class="col-5">', $raw )[0];	
			}	
			if ( strpos( $raw, '<span class="counter-count" style="margin-left:5px;">' ) !== false ) {
				$raw = explode( '<span class="counter-count" style="margin-left:5px;">', $raw );	
				unset($raw[0]); // Remove plugin name.
			}
			$i = 5;
			$sum = 0;
			$reviews = array();
			foreach( $raw  as $review ) {
				if ( strpos( $review, '</span>' ) !== false ) {
					$review = explode( '</span>', $review )[0];
					$reviews[] = $review;
					$sum +=  $i * $review;
					$i--;
				}	
			}
			$totalReviews = array_sum($reviews);
			$averageReview = $sum / $totalReviews;
			
			$review_info = array( $reviews, $averageReview, $totalReviews );
			set_transient( 'cp_review_info_' . md5($url), $review_info, 24 * HOUR_IN_SECONDS );
		}


		ob_start();
		$target_review = (float) number_format(  $a['target'] , 2);
		$averageReview1 = (float) number_format( $averageReview, 2);
		for( $j = 0; $averageReview1 < $target_review; $j++ ) {
			$averageReview1 = ( 5 * ( $reviews[0] + $j ) + 4 * $reviews[1] + 3 * $reviews[2] + 2 * $reviews[3] + 1 * $reviews[4] ) / ( ( $reviews[0] + $j ) + $reviews[1] +  $reviews[2] +  $reviews[3] + $reviews[4] );
			$averageReview1 = (float) number_format($averageReview1, 2);
			//echo ($averageReview1."<br/>");
		}

		echo "Total Review: " . $totalReviews;
		echo "  | Average Review: " . number_format($averageReview, 2); 
		echo " | Target Review: " . number_format($target_review, 2);
		echo" | Additional 5-Star Reviews Needed: $j <br/>";
		return ob_get_clean();
		
	}
);
content_copyCOPY

http://139.162.9.162/wptwo/wp-admin/plugin-editor.php?plugin