Wie vermeide ich jedes Mal ein Array zu füllen, wenn ich eine WP_query starte?

Ich mache ein folgendes Benutzersystem und benötige Hilfe zum Abrufen der Benutzer-IDs, denen ein Benutzer folgt.

Im Moment verwende ich die folgende SQL-Abfrage zum Abrufen der Benutzer-IDs, die ein Benutzer verfolgt:

$following_users_ids = $wpdb->get_results("SELECT follows_id FROM $table_name_users WHERE user_id = $current_user_id"); 

Nun, hier kommt mein Hauptproblem. Um die WP_Query mit Benutzer-IDs zu füttern, fülle ich ein Array wie folgt:

 foreach ( $following_users_ids as $following_user_id ) { $authors[] = $following_user_id->follows_id; } 

Wenn der Benutzer tausenden von Benutzern folgt, würde das Auffüllen des Arrays sehr lange dauern.

Meine Argumente für die WP_Query lauten wie folgt:

 $args = array( 'author__in' => $authors, 'posts_per_page' => 12, 'paged' => $paged, ); 

Also brauche ich einen schnelleren Weg, diese Benutzer-IDs abzurufen und die WP_Query damit zu füttern.

Solutions Collecting From Web of "Wie vermeide ich jedes Mal ein Array zu füllen, wenn ich eine WP_query starte?"

Der offensichtliche erste Schritt wäre, get_col anstelle von get_result . Sie erhalten ein Array sofort zurück, so dass Sie Ihre foreach überspringen und direkt zu:

 $args = array( 'author__in' => $following_users_ids, 'posts_per_page' => 12, 'paged' => $paged, ); 

Hinter den Kulissen macht get_col vieles, was Sie tun, aber Sie gehen nicht durch die komplexere function get_results , bevor Sie es tun.

Mit Tausenden von Benutzern bin ich nicht sicher, ob diese bestimmte Operation Überfall sein wird, den Sie denken. Das heißt, ich vermute, dass die Verzögerung vielleicht woanders liegt, zumindest einen wesentlichen Teil der Verzögerung.

Ich würde vorschlagen, dass:

  1. Sie stellen sicher, dass die Tabelle korrekt indiziert ist
  2. Und Sie cachen die Ergebnisse – möglicherweise cachen Sie sowohl die IDs als auch die Post-Ergebnisse