Machen Sie WP_Query effizienter?

Ok – benutze also eine WP_Query um die Stimmen eines Users zu zählen. Aber jetzt gibt es 23.000 Stimmen und es verbraucht viel Speicher.

Gibt es eine Möglichkeit, diese WP_Query effizienter zu machen?

$args = array( 'post_type' => 'vote', 'author'=>$user, 'meta_key'=>'comp_question', 'meta_value'=>$question_id, 'meta_compare'=>'=', 'orderby'=>'date', 'order'=>'desc' ); $the_query = new WP_Query( $args ); 

Jede Hilfe wird geschätzt! DC jede Hilfe geschätzt!

Solutions Collecting From Web of "Machen Sie WP_Query effizienter?"

Sie können einige dieser zusätzlichen Parameter ausprobieren:

  'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'cache_results'=>false, 'no_found_rows' => true, 'posts_per_page'=>1, 'post_status'='publish', 

ps: Sie können die Geschwindigkeit Ihrer Abfrage messen, wenn Sie es mit microtime()

http://php.net/manual/en/function.microtime.php

Bearbeiten:

Hier ist ein anderer Weg:

 function count_votes($user_id=1, $question_id=1, $post_type='vote', $meta_key='comp_question'){ global $wpdb; $sql = "SELECT count(*) FROM {$wpdb->posts} INNER JOIN {$wpdb->postmeta} ON ( {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id) WHERE ({$wpdb->posts}.post_author = %d) AND ({$wpdb->posts}.post_type = %s) AND ({$wpdb->posts}.post_status = 'publish' ) AND ({$wpdb->postmeta}.meta_key = %s) AND ({$wpdb->postmeta}.meta_value = %d)"; // uncomment if you need to group it //$sql .= " GROUP BY {$wpdb->posts}.ID"; $count = $wpdb->get_var($wpdb->prepare($sql,$user_id,$post_type,$meta_key,$question_id)); return $count; } 

und du kannst es so benutzen:

 $user_id=1; $question_id=1; $post_type='vote'; $meta_key='comp_question'; echo "votes: " . count_votes($user_id, $question_id, $post_type, $meta_key); 

Bearbeiten 2:

Hier ist eine function, die ein Array von Stimmen IDs zurückgibt:

 function get_votes($user_id=1, $question_id=1, $post_type='vote', $meta_key='comp_question'){ global $wpdb; $sql = "SELECT {$wpdb->posts}.ID FROM {$wpdb->posts} INNER JOIN {$wpdb->postmeta} ON ( {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id) WHERE ({$wpdb->posts}.post_author = %d) AND ({$wpdb->posts}.post_type = %s) AND ({$wpdb->posts}.post_status = 'publish' ) AND ({$wpdb->postmeta}.meta_key = %s) AND ({$wpdb->postmeta}.meta_value = %d)"; // uncomment if you need to group it //$sql .= " GROUP BY {$wpdb->posts}.ID"; $ids=array(); $ids = $wpdb->get_col($wpdb->prepare($sql,$user_id,$post_type,$meta_key,$question_id)); return $ids; } 

Du kannst es so benutzen:

 $ids=get_votes($user_id, $question_id, $post_type, $meta_key); print_r($ids);