get_editable_user_ids()
云策文档标注
概述
get_editable_user_ids() 是一个已弃用的 WordPress 函数,用于获取可编辑指定文章类型的用户 ID 列表。它基于用户权限和参数配置返回数组,适用于多站点环境。
关键要点
- 函数已弃用,自 WordPress 3.1.0 起推荐使用 get_users() 替代。
- 参数包括 $user_id(必需)、$exclude_zeros(可选,默认 true)和 $post_type(可选,默认 'post')。
- 返回值为可编辑用户的 ID 数组,若无则返回空数组。
- 函数内部检查用户权限,如 edit_others_posts 和 edit_posts,并处理多站点差异。
- 使用 SQL 查询从 usermeta 表获取用户 ID,支持排除 meta_value 为 0 的记录。
代码示例
function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) {
_deprecated_function( __FUNCTION__, '3.1.0', 'get_users()' );
global $wpdb;
if ( ! $user = get_userdata( $user_id ) )
return array();
$post_type_obj = get_post_type_object($post_type);
if ( ! $user->has_cap($post_type_obj->cap->edit_others_posts) ) {
if ( $user->has_cap($post_type_obj->cap->edit_posts) || ! $exclude_zeros )
return array($user->ID);
else
return array();
}
if ( !is_multisite() )
$level_key = $wpdb->get_blog_prefix() . 'user_level';
else
$level_key = $wpdb->get_blog_prefix() . 'capabilities'; // WPMU site admins don't have user_levels.
$query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key);
if ( $exclude_zeros )
$query .= " AND meta_value != '0'";
return $wpdb->get_col( $query );
}注意事项
- 此函数已弃用,新开发中应避免使用,改用 get_users() 实现类似功能。
- 在多站点环境中,函数使用 capabilities 作为 meta_key,而非 user_level,以适应站点管理员权限结构。
- 函数依赖于 WordPress 数据库对象 $wpdb 和相关函数,如 get_userdata() 和 get_post_type_object()。
原文内容
Gets the IDs of any users who can edit posts.
Parameters
$user_idintrequired-
User ID.
$exclude_zerosbooloptional-
Whether to exclude zeroes.
Default:
true
Source
function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) {
_deprecated_function( __FUNCTION__, '3.1.0', 'get_users()' );
global $wpdb;
if ( ! $user = get_userdata( $user_id ) )
return array();
$post_type_obj = get_post_type_object($post_type);
if ( ! $user->has_cap($post_type_obj->cap->edit_others_posts) ) {
if ( $user->has_cap($post_type_obj->cap->edit_posts) || ! $exclude_zeros )
return array($user->ID);
else
return array();
}
if ( !is_multisite() )
$level_key = $wpdb->get_blog_prefix() . 'user_level';
else
$level_key = $wpdb->get_blog_prefix() . 'capabilities'; // WPMU site admins don't have user_levels.
$query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key);
if ( $exclude_zeros )
$query .= " AND meta_value != '0'";
return $wpdb->get_col( $query );
}
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |