Überprüfen Sie, ob WP_User_Query ‘include’ leer ist

Das ist mein Code:

$args = array ( 'order' => 'DESC', 'include' => get_user_meta($author->ID, 'the_following_users', true) ); $wp_user_query = new WP_User_Query( $args ); $users = $wp_user_query->get_results(); if ( ! empty( $users ) ) { foreach ( $users as $user ) { // Get users } } else { echo 'Error.'; } 

Der Benutzer meta ‘the_users’ kann leer sein. Wenn er leer ist, sind alle registrierten Benutzer bei mir, wenn er nicht leer ist, druckt er die Benutzer aus, die ich brauche.

Das Problem, dass if ( ! empty( $users ) ) { } nicht liest, wenn ‘include’ leer ist oder nicht, ich weiß, dass ich eine Variable erstellen und zuerst prüfen kann, ob die Variable leer ist oder nicht, aber ich brauche das nicht Ich möchte mit ‘$ wp_user_query-> get_results ()’ prüfen, ob ‘include’ leer ist.

BEARBEITEN:

Als Antwort von Nicolai können wir true to false von get_user_meta code ersetzen und das Problem wird getriggers. Wenn das include leer ist, gibt die WP-User_Query einen false und print Fehler zurück.

Das Problem jetzt, dass, wenn Include nicht leer, so muss der Code ohne Probleme funktionieren, aber das passiert nicht, es ignoriert die Benutzer, die in ‘the_users’ Benutzer Meta gespeichert und nur aktuellen Benutzer drucken.

Hier ist der Wert von “the_users” user meta:

 a:19:{i:0;s:2:"89";i:3;s:3:"105";i:4;s:2:"74";i:5;s:3:"111";i:6;s:3:"167";i:7;s:2:"83";i:8;s:2:"54";i:9;s:2:"87";i:10;s:2:"85";i:11;s:2:"77";i:13;s:2:"82";i:14;s:2:"60";i:15;s:3:"149";i:16;s:3:"160";i:17;s:2:"71";i:18;s:1:"3";i:19;s:1:"2";i:20;s:3:"121";i:21;s:2:"57";} 

So habe ich die Benutzermetadaten von “the_users” gespeichert:

 $the_following_users = get_user_meta($the_follower, "the_following_users", true); if(!in_array($user_follow_to, $the_following_users) && is_array($the_following_users)){ $the_following_users[] = $user_follow_to; } else { $the_following_users = array($user_follow_to); } update_user_meta($the_follower, "the_following_users", $the_following_users); 

Solutions Collecting From Web of "Überprüfen Sie, ob WP_User_Query ‘include’ leer ist"

Ich denke, das Problem ist, dass Sie bei der Verletzung dieser Regel Verwirrung und Probleme geschaffen haben:

mache 1 Sache pro Aussage, 1 Aussage pro Zeile

Mit einem anderen Problem verbunden:

Übergeben von Arrays an die APIs, die als serialisiertes PHP gespeichert werden (Sicherheitsproblem)

Und ein anderer:

Überprüfen Sie immer Ihre Annahmen

Es ignoriert die Benutzer, die in der Benutzermeta ‘the_users’ gespeichert sind, und druckt nur den aktuellen Benutzer.

Der letzte ist der Mörder hier. Sie werden nie nach Fehlerwerten auf get_user_meta , was zu Fehlern führt. Benutzer beginnen nicht mit the_users Meta für “Benutzer”, es muss hinzugefügt werden.

Führen Sie diesen Code in Ihrem Kopf durch, zB:

 $the_following_users = ''; //get_user_meta($the_follower, "the_following_users", true); if(!in_array($user_follow_to, $the_following_users) && is_array($the_following_users)){ $the_following_users[] = $user_follow_to; 

Hier gibt es keine Überprüfung von $the_following_users , die möglicherweise kein Array ist, sondern eine false oder eine leere Zeichenfolge.

Also lasst uns das Speichern reparieren:

 $the_following_users = get_user_meta($the_follower, "the_following_users", true); if ( empty( $the_following_users ) ) { $the_following_user = array(); } 

Dann vereinfachen wir den nächsten Teil:

 $the_following_users[] = $user_follow_to; 

Und beheben Sie das Speichern, damit es kein Sicherheitsrisiko darstellt:

 $following = implode( ',', $the_following_users ); update_user_meta($the_follower, "the_following_users", $following ); 

Zum Schluss gehen wir zum Frontend:

Erstens nehmen wir an, dass get_user_meta funktioniert, aber prüfen Sie nie, ob dies zutrifft:

 $args = array ( 'order' => 'DESC', 'include' => get_user_meta($author->ID, 'the_following_users', true) ); 

Was ist, wenn der Benutzer noch nie jemandem gefolgt ist? Was, wenn sie alle nicht erreichten? Das würde alles kaputt machen! Lasst uns das beheben und es in das Komma-getrennte Listenformat umwandeln:

 $include = get_user_meta($author->ID, 'the_following_users', true); if ( empty( $include ) ) { // the user follows nobody, or has not followed anybody yet! } else { // turn the string into an array $include = explode( ',', $include ); $args = array ( 'order' => 'DESC', 'include' => $include ); // etc... } 

Eine letzte Anmerkung

Ihre Schleife sieht so aus:

 foreach ( $users as $user ) { // Get users } 

Aber Sie teilen den Code innerhalb der Schleife nie, weshalb Sie Probleme haben könnten. Zum Beispiel verweist the_author immer auf den Autor des aktuellen the_author . Wenn Sie Informationen über den $user anzeigen möchten, müssen Sie seine ID übergeben oder die öffentlichen Eigenschaften, z

 foreach ( $users as $user ) { // Get users echo esc_html( $user->first_name . ' ' . $user->last_name ); } 

Der include Parameter von WP_User_Query erwartet ein Array als Argument. Setzen Sie den $single Parameter von get_user_meta auf false . Oder benutze es nicht, denn false ist der Standardwert.

 // USE get_user_meta( $author->ID, 'the_users', false ) // OR get_user_meta( $author->ID, 'the_users' )