Come ordinare i post in media dei meta valori di commento
-
31-10-2019 - |
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