函数文档

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

Return

array Array of editable user IDs, empty array otherwise.

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.