不懂WordPress函数的逻辑'is_super_admin'
I don't understand the logic of the WordPress function 'is_super_admin'
我目前正在学习 WordPress 核心,并在学习中遇到了这个功能:
/**
* Determine if user is a site admin.
*
* @since 3.0.0
*
* @param int $user_id (Optional) The ID of a user. Defaults to the current user.
* @return bool True if the user is a site admin.
*/
function is_super_admin( $user_id = false ) {
if ( ! $user_id || $user_id == get_current_user_id() )
$user = wp_get_current_user();
else
$user = get_userdata( $user_id );
if ( ! $user || ! $user->exists() )
return false;
if ( is_multisite() ) {
$super_admins = get_super_admins();
if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins ) )
return true;
} else {
if ( $user->has_cap('delete_users') )
return true;
}
return false;
}
我还是个初学者,所以这可能是个愚蠢的问题,但第一个 if...else 语句中的逻辑对我来说似乎很奇怪:
if ( ! $user_id || $user_id == get_current_user_id() )
$user = wp_get_current_user();
else
$user = get_userdata( $user_id );
为什么我们需要这种逻辑比较?
$user_id == get_current_user_id()
在我看来,如果传入$user_id,我们应该调用get_userdata($user_id),如果没有传入$user_id ,那么我们应该调用 wp_get_current_user(),像这样:
$user = $user_id ? get_userdata($user_id) : wp_get_current_user();
$user_id == get_current_user_id() 的整个比较只是增加了额外的工作,对吧?以这种方式编写函数的一些可能的理由是什么?
! $user_id || $user_id == get_current_user_id()
is 语句为真,因此如果使用 user_id 调用函数为假,或者如果传递的 user_id 实际上是当前用户,则简单地加载当前用户会更有效。没有数据库查询。
否则,如果指定了 user_id,则必须触发查询以获取其数据。
逻辑没问题:)
我目前正在学习 WordPress 核心,并在学习中遇到了这个功能:
/**
* Determine if user is a site admin.
*
* @since 3.0.0
*
* @param int $user_id (Optional) The ID of a user. Defaults to the current user.
* @return bool True if the user is a site admin.
*/
function is_super_admin( $user_id = false ) {
if ( ! $user_id || $user_id == get_current_user_id() )
$user = wp_get_current_user();
else
$user = get_userdata( $user_id );
if ( ! $user || ! $user->exists() )
return false;
if ( is_multisite() ) {
$super_admins = get_super_admins();
if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins ) )
return true;
} else {
if ( $user->has_cap('delete_users') )
return true;
}
return false;
}
我还是个初学者,所以这可能是个愚蠢的问题,但第一个 if...else 语句中的逻辑对我来说似乎很奇怪:
if ( ! $user_id || $user_id == get_current_user_id() )
$user = wp_get_current_user();
else
$user = get_userdata( $user_id );
为什么我们需要这种逻辑比较?
$user_id == get_current_user_id()
在我看来,如果传入$user_id,我们应该调用get_userdata($user_id),如果没有传入$user_id ,那么我们应该调用 wp_get_current_user(),像这样:
$user = $user_id ? get_userdata($user_id) : wp_get_current_user();
$user_id == get_current_user_id() 的整个比较只是增加了额外的工作,对吧?以这种方式编写函数的一些可能的理由是什么?
! $user_id || $user_id == get_current_user_id() is 语句为真,因此如果使用 user_id 调用函数为假,或者如果传递的 user_id 实际上是当前用户,则简单地加载当前用户会更有效。没有数据库查询。
否则,如果指定了 user_id,则必须触发查询以获取其数据。
逻辑没问题:)