WordPress: implementare un sistema di votazione per i post

Short link

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;
}

L'autore

Gabriele Romanato, sviluppatore web full stack specializzato in siti, applicativi web ed e-commerce con Node.js e PHP.