In WordPress possiamo creare un sistema di votazione per i post.
Possiamo prima creare una action AJAX per registrare il voto su ciascun post.
function my_set_post_rating() {
$post_id = (int) $_POST['id'];
$vote = (int) $_POST['vote'];
$rating = get_post_meta( $post_id, 'rating', true );
if( !$rating ) {
$votes = array( $vote );
update_post_meta( $post_id, 'rating', serialize( $votes ) );
} else {
$votes = unserialize( $rating );
$votes[] = $vote;
update_post_meta( $post_id, 'rating', serialize( $votes ) );
}
wp_send_json( array( 'saved' => true ) );
}
add_action( 'wp_ajax_my_set_post_rating', 'my_set_post_rating' );
add_action( 'wp_ajax_nopriv_my_set_post_rating', 'my_set_post_rating' );
Quindi possiamo implementare una funzione che mostri nel template single.php la media aritmetica dei voti.
function my_get_game_rating( $post_id ) {
$rating = get_post_meta( $post_id, 'rating', true );
if( !$rating ) {
return 0;
}
$votes = unserialize( $rating );
$total = 0;
foreach( $votes as $vote ) {
$total += (int) $vote;
}
$avg = round( $total / count( $votes ) );
return $avg;
}