Mehrere WP_querys zu einem Aufruf optimieren?

Ich bin fertig mit dem Aufbau meiner Website und habe bemerkt, dass es aufgrund der Struktur 3 Sekunden dauert, um die Daten zu laden, da jede WP_query zwischen verschiedenen Post-Typen springt. Ich habe mich gefragt, ob ich diese in einer function ausführen lasse, so dass ich nicht jedes Mal ein Array ausführen muss, wenn das irgendeinen nützlichen Effekt hätte?

Leider habe ich es im Moment versucht:

function get_gametitle_info() { global $post; $game_terms = get_the_terms($post, 'games_titles'); $game_con = wp_list_pluck( $game_terms, 'slug' ); $game_info = array( 'post_type'=> 'game_information', 'posts_per_page' => 1, 'post_status' => 'publish', 'order' => 'ASC', 'tax_query' => array( array( 'taxonomy' => 'games_titles', 'field' => 'slug', 'terms' => $game_con, ), ) ); $game_info_query = new WP_Query( $game_info ); while ( $game_info_query->have_posts() ) : $game_info_query->the_post(); $gametitleID = get_the_ID(); if (has_term('3pegi', 'age_ratings', $post)){ $age_terms = array('3pegi'); } if (has_term('7pegi', 'age_ratings', $post)){ $age_terms = array('3pegi', '7pegi'); } if (has_term('12pegi', 'age_ratings', $post)){ $age_terms = array(array('3pegi', '7pegi', '12pegi')); } if (has_term('16pegi', 'age_ratings', $post)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi'); } if (has_term('18pegi', 'age_ratings', $post)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi', '18pegi'); } endwhile; return $gametitleID; return $age_terms; return $game_info_query; } 

Dies gibt mir ein – Warnung: Ungültiges Argument für foreach () in D: \ xampp \ htdocs \ wp-includes \ functions.php in Zeile 2721 angegeben

Das game_info-Array muss nur einmal ausgeführt werden, ich würde es dann lieben, diese Daten verwenden zu können, anstatt jedesmal einen neuen Lauf auf allen anderen übereinstimmenden Abfragen durchzuführen, wenn ich den Post-Typ nach der Verwendung von wp_reset_postdata () zurückwechsle;

Tut mir leid, wenn es nicht klar ist. Eine andere Art zu erklären ist, ich habe:

[Beitrag [A Beitrag] Beitrag Beitrag [A Beitrag] Beitrag [B Beitrag] [Beitrag]]

Das ständige Umschalten scheint mir sinnlos, wenn ich in Wahrheit nur einmal die wp_query für A und B machen muss. Würde das Ressourcen einsparen und die 3 Sekunden Last reduzieren? Vielen Dank

Normale Struktur in der Post-Datei:

 $currentID = get_the_ID(); $game_terms = get_the_terms($post->ID, 'games_titles'); $game_con = wp_list_pluck( $game_terms, 'slug' ); $args = array( 'post_type'=> 'game_information', 'posts_per_page' => 1, 'post_status' => 'publish', 'order' => 'ASC', 'tax_query' => array( array( 'taxonomy' => 'games_titles', 'field' => 'slug', 'terms' => $game_con, ), )/*Search above post type for taxonomy and if matches then proceed*/ ); $the_query = new WP_Query( $args ); if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); $gametitleID = get_the_ID(); if (has_term('3pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi'); } if (has_term('7pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi', '7pegi'); } if (has_term('12pegi', 'age_ratings', $post->ID)){ $age_terms = array(array('3pegi', '7pegi', '12pegi')); } if (has_term('16pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi'); } if (has_term('18pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi', '18pegi'); } endwhile; else: endif; wp_reset_postdata(); 

Zur weiteren Klärung suche ich nach einer Möglichkeit, die wp_query einmal beim Laden der Seite aufzurufen (spezifisch für diese Seite) und die Daten als Variable zu speichern, um sie in der Kopfzeile, Haupt-, Seitenleiste und Fußzeile zu verwenden. MUSS jedoch für jede einzelne Seitenladung aktualisiert werden, da die Daten sehr dynamisch sind und aktuell sein müssen. Im Moment rufe ich mehrere wp_query auf und setze die Postdata jedesmal zurück (auch wenn die wp_query die gleichen Daten aufruft), weil ich zwischen Post-Typen wechseln muss.

Einfachste Art und Weise, die ich erklären kann – Suche nach einer Möglichkeit, mehrere WP_Query der gleichen Daten in einem Aufruf zu optimieren, aber in der Lage, an mehreren Stellen innerhalb einer Vorlage verwendet werden.

Solutions Collecting From Web of "Mehrere WP_querys zu einem Aufruf optimieren?"

Ihre Beschreibung des Problems ist nicht sehr klar, und Ihre inkonsistente Code-Formatierung macht das schwer zu lesen (plus ich bin ziemlich sicher, dass Code fehlt), aber wenn das Problem die Abfrage mehrmals ausführt, können Sie das mit einer statischen Variable lösen .

 function get_gametitle_info() { static $game_info_query = false; if (false !== $game_info_query) { return $game_info_query; } /* the rest of your code */ } 

Sie “speichern” das Ergebnis, gut für die einzelne Seite laden, die helfen sollte. Sie können mit der Transienten-API mehrere Seiten laden .

 function get_gametitle_info() { $game_info_query = get_transient( 'game_info_query' ); if ( !empty( $game_info_query ) ){ return $game_info_query; } /* (most of) the rest of your code */ set_transient('game_info_query', $game_info_query, HOUR_IN_SECONDS ); return $game_info_query; } 

Dies sollte die Daten für eine Stunde in der database speichern, bevor sie aktualisiert werden. Natürlich können Sie einen anderen Zeitrahmen wählen. Die einzelne einfache Abfrage sollte schneller sein als die komplizierte Abfrage.

Sie könnten die beiden Ansätze sogar kombinieren, obwohl ich nicht getestet habe und ich bin mir nicht sicher über die Wirksamkeit.

 function get_gametitle_info() { static $game_info_query = false; if (false !== $game_info_query) { return $game_info_query; } $game_info_query = get_transient( 'game_info_query' ); if ( !empty( $game_info_query ) ){ return $game_info_query; } /* (most of) the rest of your code */ $game_info_query = 'howdy'; set_transient('game_info_query', $game_info_query, HOUR_IN_SECONDS ); return $game_info_query; }