升级到WordPress 4.0.1后WP_USER_QUERY意外输出

时间:2014-11-29 作者:Bizio73

我已经将Wordpress更新到了新版本4.0.1,我遇到了一些问题。在我有一个旧版本之前,3.5.1和我的代码一切正常。请原谅我英语不好,我试着解释一下。

我有以下代码:

$user_query = new WP_User_Query(array(\'ID\'));
$users = (array) $user_query;

...

<select name="UsersZone" class="" style="width: 100%" onChange="setZoneUser(this.value);">

<option value="false">--Select A User--</option>

<?php

foreach($users["results"] as $user) {

?>

<option value="<?php echo $user->ID?>"><?php echo $user->display_name;?></option>

<?php

}

?>

</select>
因此,有了这段代码,我应该有一个用户列表。但我收到以下错误:

Warning: Invalid argument supplied for foreach() in /web/htdocs/www.mywebsite.com/home/... on line xxx
其中xxx是线

    foreach($users["results"] as $user)
我试着使用var_dump($users) 我得到了这个:

                array(8) {
  ["query_vars"]=>
  array(17) {

...

  }
  ["WP_User_Queryresults"]=>
  array(1) {
    [0]=>
    object(WP_User)#4246 (7) {
      ["data"]=>
      object(stdClass)#4244 (10) {
        ["ID"]=>
        string(1) "1"
        ["user_login"]=>
        string(5) "Admin"
        ["user_pass"]=>
        string(34) "xxx"
        ["user_nicename"]=>
        string(5) "admin"
        ["user_email"]=>
        string(26) "[email protected]"
        ["user_url"]=>
        string(0) ""
        ["user_registered"]=>
        string(19) "2014-11-26 18:55:12"
        ["user_activation_key"]=>
        string(0) ""
        ["user_status"]=>
        string(1) "0"
        ["display_name"]=>
        string(5) "Admin"
      }
      ["ID"]=>
      int(1)
      ["caps"]=>
      array(1) {
        ["administrator"]=>
        bool(true)
      }
      ["cap_key"]=>
      string(15) "wp_capabilities"
      ["roles"]=>
      array(1) {
        [0]=>
        string(13) "administrator"
      }
      ["allcaps"]=>
      array(63) {

...
  }
  ["filter"]=>
  NULL
    }
  }
  ["WP_User_Querytotal_users"]=>
  string(1) "1"
  ["query_fields"]=>
  string(30) "SQL_CALC_FOUND_ROWS wp_users.*"
  ["query_from"]=>
  string(13) "FROM wp_users"
  ["query_where"]=>
  string(9) "WHERE 1=1"
  ["query_orderby"]=>
  string(23) "ORDER BY user_login ASC"
  ["query_limit"]=>
  NULL
}
因此,问题出现在“WP\\u User\\u Queryresults”字段中,而不是“results”。

我如何解决这个问题?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

你不应该进来$users["results"] 直接发送给foreach,无需检查$users 是一个数组,并且它有一个“results”键。如果$users 为空,或为false,并且WP_Error 对象

在本例中,它不是数组,而是WP_User_Query 对象将其投射到阵列不会解决此问题。相反,您应该这样使用它:

$user_query = new WP_User_Query( $args );

if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {
        echo \'<p>\' . $user->display_name . \'</p>\';
    }
} else {
    echo \'No users found.\';
}
在哪里$user_query->results 是中的数组$user_query 对象

不是这样的:

// this will fail!
$user_query = new WP_User_Query( $args );
$user_query = ( array ) $user_query;
foreach ( $user_query["results"] as $user ) {
    echo \'<p>\' . $user->display_name . \'</p>\';
}
进一步阅读

结束

相关推荐