为什么我在WP_USER_QUERY中添加NUMBER参数时出现错误?

时间:2016-09-07 作者:Dustin Yoxall

我有个习惯WP_Users_Query 我在一个网站上使用的。

一段时间以来,它一直运行良好。我使用number 参数as per the docs here. 但出于某种原因,当我添加该参数时,我会得到一个SQL错误,除非我将其设置为-1 在那里它可以归还一切。

以下是我的代码:

$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 );
}
如果我添加该行:\'number\' => \'2\' 对于我的args数组(我尝试将其作为字符串和整数,两者的结果都相同),我在日志中得到以下错误:

WordPress数据库错误您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在第15行中使用“-2,2”附近进行查询的正确语法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

此外,我还尝试用不同的数字代替2,结果都是一样的。唯一一次我没有得到错误是如果我将它设置为-1。然后它工作得很好(但没有分页)。

我对这件事感到抓狂,所以任何帮助都将不胜感激!

2 个回复
SO网友:Jeremy Ross

我能够重现错误。以下是我认为正在发生的事情。

“number”定义每页的用户数,“paged”告诉查询返回哪个页面。

例如:

$args = array(\'number\' => 2, \'paged\' => 2)
将以每页2的速度返回第二页。

如果未设置查询字符串,则会出现错误,因为它试图显示未定义页面中的2个用户。

解决方案是省去“paged”参数,让它从第1页开始(默认设置)。

关于如何实现分页,我的经验到此结束,但它似乎是“offset”参数的函数,如:

\'offset\' => get_query_var($paged) * $number
(假设查询变量存在)

SO网友:Dustin Yoxall

好吧,我知道我的问题是什么了。问题在于paged 论点我想这是因为我在检查它,但如果没有发现,它会导致问题。这是我现在使用的代码。

$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 );
}
您会注意到,在第二行,我正在检查paged 查询var,如果找不到,则将其设置为1。这似乎修复了SQL错误。