有这么一个类WP_User_Query,基本用法可以通过get_results()方法或者$results获取用户列表
<?php
$args = array(
.
.
.
);
// The Query
$user_query = new WP_User_Query( $args );
// User Loop
if ( ! empty( $user_query->get_results() ) ) {
foreach ( $user_query->get_results() as $user ) {
echo '<p>' . $user->display_name . '</p>';
}
} else {
echo 'No users found.';
}
?>role表示查询匹配角色的用户
fields表示查询返回指定的字段
$user_fields = array( 'user_login', 'user_nicename', 'user_email', 'user_url' );
$user_query = new WP_User_Query( array( 'role' => 'editor', 'fields' => $user_fields ) );如果只是查询所有用户的话,也可以通过get_users()函数
File: wp-includes/user.php
function get_users( $args = array() ) {
$args = wp_parse_args( $args );
$args['count_total'] = false;
$user_search = new WP_User_Query( $args );
return (array) $user_search->get_results();
}但是查询参数里的count_total始终设置为false,想获取用户查询结果用户数的话,还得用WP_User_Query类里的get_total()方法或者total_users属性,在这里默认值是true
分页的话用到number,offset或paged这三个参数,number指返回结果最大数量,offset设置偏移量或者用paged设置查询的页码
// limit
if ( isset( $qv['number'] ) && $qv['number'] > 0 ) {
if ( $qv['offset'] ) {
$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] );
} else {
$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] );
}
}通过源码可知,设置了offset就不用paged这参数了,所以两者选其一
最后我想在函数中使用怎么办,通过百度可知,PHP中全局变量在函数中使用时必须声明为 global。
所以函数中使用global $user_query;但我要设置每次分页的参数怎么办,发现了WP_User_Query类有get,set方法$user_query->set('paged',$page);
然后我又还尝试获取结果,每次都是第一页
$users= $user_query->get_results();
$total=$user_query->get_total();看上面那get_users()函数是在函数内实例化类,或者我看那简单的没用函数直接展示页面。但我这次用的是AJAX,不知道是什么思想不想每次都在函数内实例化类,就想用全局的,一番查找后发现可以这样
/**
* PHP5 constructor.
*
* @since 3.1.0
*
* @param null|string|array $query Optional. The query variables.
*/
public function __construct( $query = null ) {
if ( ! empty( $query ) ) {
$this->prepare_query( $query );
$this->query();
}
}看到源码他是这样在构造函数里,处理了查询参数,再执行查询,我一看prepare_query函数里最终用到的是$this->query_vars,而这函数作用应该就是设置SQL查询语句,你光set方法设置了变量不改动查询语句也没用啊,看到这些函数都是public然后在我自己的函数里这样试着
$user_query->prepare_query($user_query->$query_vars );
$user_query->query();因为之前只用了query()发现不行,看来还是要在查询前处理下查询参数,这样的话就可以在函数内使用全局的对象,每次分页只用设置一下参数重新执行查询方法。