Wie erhält man die Gesamtzahl der Meta-Werte basierend auf einem benutzerdefinierten Post-Typ?

Ich muss die Gesamtzahl der Stimmen anzeigen, die für einen bestimmten benutzerdefinierten Posttyp vorgenommen wurden. Hier sehen Sie ein Beispiel dafür, wie die Tabelle wp_postmeta nach diesen Schlüsseln / Werten sucht:

 meta_id post_id meta_key meta_value 22 4 vote 4 26 6 vote 0 27 7 vote 1 32 10 vote 10 

Angenommen, die erste und die letzte wp_postmeta sind wp_postmeta Zeilen für die benutzerdefinierten Post-Typ- movies . Wie kann ich insgesamt 14 bekommen?

Hier ist der Code, den ich versucht habe, aber es funktioniert nicht. Es scheint die Werte aller Post-Typen zusammenzufassen und nicht nur für den angegebenen benutzerdefinierten Post-Typ.

 function meta_val( $key = '', $type = 'post', $status = 'publish' ) { global $wpdb; $r = $wpdb->get_col( $wpdb->prepare( " SELECT pm.meta_value FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id WHERE pm.meta_key = '%s' AND p.post_status = '%s' AND p.post_type = '%s' ", $key, $status, $type ) ); return $r; } function total_votes( $post_type ) { $votes = meta_val( 'vote', 'movies' ); $sum = array_sum( $votes ); return $sum; } 

Solutions Collecting From Web of "Wie erhält man die Gesamtzahl der Meta-Werte basierend auf einem benutzerdefinierten Post-Typ?"

Es gibt möglicherweise keine Notwendigkeit für eine benutzerdefinierte Abfrage, aber ich würde es empfehlen, anstatt die database zu treffen: – einmal für die WP_Query – noch einmal für jeden Post-Eintrag

Und dann manuell die Mathematik in PHP erarbeiten. Machen Sie alles gleichzeitig mit einer MySQL-statement.

 select sum(PM.meta_value) from wp_postmeta PM join wp_posts P on P.ID = PM.post_id where P.post_type='page' and PM.meta_key='test' 

Ersetzen Sie die Zeile $r=... mit dem obigen Code durch $r=... :

 $r = $wpdb->get_results( $wpdb->prepare( " SELECT SUM(pm.meta_value) FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id WHERE pm.meta_key = '%s' AND p.post_status = '%s' AND p.post_type = '%s' ", $key, $status, $type ) ); 

$r[0] sollte deine Summe sein. 🙂

Versuchen Sie das, sollten Sie beginnen .. (nicht getestet)

 function count_total_vote() { $args = array( 'post_type' => 'post', // Your post type 'status' => 'publish', 'meta_key' => 'vote', // Meta Key ); $total = 0; $votes = new WP_Query( $args ); if ( $votes->have_posts() ) { while ( $votes->have_posts() ) { $votes->the_post(); $total += get_post_meta( get_the_ID(), 'vote', true ); } } echo $total; } 

Keine Notwendigkeit für eine benutzerdefinierte Abfrage für die database.