Warum erhalte ich einen Fehler, wenn ich den Parameter number zu meiner WP_User_Query hinzufüge?

Ich habe eine benutzerdefinierte WP_Users_Query , die ich auf einer Website verwendet habe.

Es hat für eine Weile gut funktioniert. Ich bin gegangen, um der Abfrage eine Seitennummerierung hinzuzufügen, indem ich den Parameter number wie hier in der Dokumentation verwende . Aber aus irgendeinem Grund bekomme ich einen SQL-Fehler, wenn ich diesen Parameter hinzufüge, außer ich setze ihn auf -1 wo er alles zurückgibt.

Hier ist mein Code, der funktioniert:

 $user_fields = array( 'ID', 'display_name', 'user_email' ); $args = array( 'role__in' => array('Subcriber', 'Editor'), 'meta_query' => array( array( 'key' => 'list_in_directory', 'value' => 1, 'compare' => '=' ) ), 'fields' => $user_fields, 'paged' => get_query_var('paged') ); // End Args if ($args){ $user_query = new WP_User_Query( $args ); } 

Wenn ich die Zeile: 'number' => '2' zu meinem args-Array hinzufüge (ich habe es sowohl als String als auch als Integer versucht, beide mit dem gleichen Ergebnis), bekomme ich diesen Fehler in meinem Log:

WordPress-databaseerrors Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, für die richtige Syntax für die Abfrage ‘-2, 2’ in Zeile 15 für die Abfrage SELECT SQL_CALC_FOUND_ROWS wp_users.ID,wp_users.display_name,wp_users.user_email FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id ) INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id ) WHERE 1=1 AND ( ( ( ( wp_usermeta.meta_key = 'list_in_directory' AND wp_usermeta.meta_value = '1' ) ) AND ( ( ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%\"Subcriber\"%' ) OR ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%\"Editor\"%' ) ) ) ) ) ORDER BY user_login ASC LIMIT -2, 2 made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/pand/page-templates/membership-directory.php'), WP_User_Query->__construct, WP_User_Query->query

Ich habe auch versucht, verschiedene Zahlen anstelle von 2 mit dem gleichen Ergebnis zu verwenden. Das einzige Mal, wenn ich den Fehler nicht erhalte, ist, wenn ich ihn auf -1 setze. Dann funktioniert es gut (aber keine Seitenumbruch).

Ich kratze mich am Kopf, damit jede Hilfe sehr geschätzt wird!

Solutions Collecting From Web of "Warum erhalte ich einen Fehler, wenn ich den Parameter number zu meiner WP_User_Query hinzufüge?"

Ich konnte den Fehler reproduzieren. Hier ist, was ich denke, geschieht.

‘number’ definiert die Anzahl der Benutzer pro Seite und ‘paged’ teilt der Abfrage mit, welche Seite zurückgegeben werden soll.

Beispielsweise:

 $args = array('number' => 2, 'paged' => 2) 

gibt die zweite Seite auf 2 pro Seite zurück.

Wenn Sie keine Abfragezeichenfolge festgelegt haben, erhalten Sie eine Fehlermeldung, weil versucht wird, 2 Benutzer von einer Seite anzuzeigen, die nicht definiert ist.

Die Lösung besteht darin, den Parameter ‘paged’ wegzulassen und auf Seite 1 (Standard) zu beginnen.

Meine Erfahrung endet hier im Hinblick auf die Implementierung der Seitennummerierung, aber es sieht so aus, als ob es eine function des Parameters ‘offset’ ist:

 'offset' => get_query_var($paged) * $number 

(Angenommen, die Abfragevariable existiert)

Ok, also habe ich herausgefunden, was mein Problem war. Das Problem war mit dem paged Argument. Ich denke, es war, weil ich nach ihm suchte, aber falls es nicht gefunden wurde, verursachte es Probleme. Also hier ist der Code, den ich jetzt habe, der funktioniert.

 $user_fields = array( 'ID', 'display_name', 'user_email' ); $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'number' => '1', 'role__in' => array('Subcriber', 'Editor'), 'meta_query' => array( array( 'key' => 'list_in_directory', 'value' => 1, 'compare' => '=' ), ), 'fields' => $user_fields, 'paged' => $paged ); //End Args if ($args){ $user_query = new WP_User_Query( $args ); } 

Sie werden feststellen, dass ich in der zweiten Zeile nach der paged Abfrage- paged suche und sie auf 1 paged , wenn sie nicht gefunden wird. Das scheint den SQL-Fehler behoben zu haben.