Por que recebo um erro quando adiciono o parâmetro do número ao meu WP_User_Query?

Tenho um WP_Users_Query personalizado que WP_Users_Query em um site.

Funcionou bem por um tempo. Eu fui adicionar alguma paginação à consulta usando o parâmetro number conforme os documentos aqui . Mas, por algum motivo, quando adiciono esse parâmetro, recebo um erro SQL, a menos que eu o configure em -1 onde ele retorna tudo.

Aqui está o meu código que funciona:

 $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 ); } 

Se eu adicionar a linha: 'number' => '2' para minha matriz args (Eu tentei tanto como uma string e um inteiro, ambos com o mesmo resultado) Eu recebo este erro no meu log:

Erro no database WordPress Você tem um erro na sua syntax SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a syntax certa usar próximo de ‘-2, 2’ na linha 15 para consulta 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

Além disso, tentei usar números diferentes no lugar de 2, todos com o mesmo resultado. A única vez que eu não recebo o erro é se eu configurá-lo para -1. Então funciona bem (mas sem paginação).

Estou arranhando minha cabeça sobre este, então qualquer ajuda será muito apreciada!

Solutions Collecting From Web of "Por que recebo um erro quando adiciono o parâmetro do número ao meu WP_User_Query?"

Consegui reproduzir o erro. Aqui está o que eu acho que está acontecendo.

‘number’ define o número de usuários por página e ‘paged’ diz à consulta qual página retornar.

Por exemplo:

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

irá retornar a segunda página em 2 por página.

Se você não tiver um conjunto de seqüência de consulta, você receberá um erro porque está tentando mostrar 2 usuários de uma página que está indefinida.

A solução é deixar o parâmetro “paginado” e deixá-lo começar na página 1 (o padrão).

Minha experiência acaba aqui em relação a como implementar a paginação, mas parece que é uma function do parâmetro ‘offset’ como:

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

(assumindo que a consulta var existe)

Ok, então eu descobri o que era meu problema. A questão foi com o argumento paged . Eu acho que foi porque eu estava procurando por isso, mas no caso de não ser encontrado estava causando problemas. Então, aqui está o código que eu tenho agora que está funcionando.

 $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 ); } 

Você notará na segunda linha que estou checando a paged consulta paged e configurando-a para 1 se ela não for encontrada. Isso parece corrigir o erro SQL.