我已经将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”。
我如何解决这个问题?
最合适的回答,由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>\';
}
进一步阅读