Domanda

Ecco la situazione

Ho personalizzato l'invio dei commenti in base alla quale gli utenti possono fornire una valutazione e questo viene memorizzato come meta valore nella tabella dei commenti. Posso interrogare per restituire il valore medio e la visualizzazione nel post. Nessun problema finora.

Quello che voglio fare ora è ordinare post con questa valutazione media.

Il mio codice per ottenere la valutazione media è:

function average_rating() {
global $wpdb;
$post_id = get_the_ID();
$ratings = $wpdb->get_results("

    SELECT $wpdb->commentmeta.meta_value
    FROM $wpdb->commentmeta
    INNER JOIN $wpdb->comments on $wpdb->comments.comment_id=$wpdb->commentmeta.comment_id
    WHERE $wpdb->commentmeta.meta_key='rating' 
    AND $wpdb->comments.comment_post_id=$post_id 
    AND $wpdb->comments.comment_approved =1

    ");
$counter = 0;
$average_rating = 0;    
if ($ratings) {
    foreach ($ratings as $rating) {
        $average_rating = $average_rating + $rating->meta_value;
        $counter++;
    } 
    //round the average to the nearast 1/2 point
    return (round(($average_rating/$counter)*2,0)/2);  
} else {
    //no ratings
    return 'no rating';
}
}

Sto pensando di dover iniziare a conservare il valore medio come post meta field, altrimenti dovrei passare attraverso le query all'interno delle query con più join, il che sembra essere davvero una cattiva idea. Spero che qualcuno con un nuovo set di occhi possa aiutarmi a pensare attraverso l'architettura.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top