В настоящее время я изучаю ядро 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), а если передано NO $ 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 равен true, поэтому, если функция вызывается с user_id для false, ИЛИ если переданный user_id фактически является текущим пользователем, эффективнее просто загрузить текущего пользователя. нет запросов к базе данных.
в противном случае, если указан user_id, запрос должен быть запущен, чтобы получить его данные.
логика в порядке 🙂
Других решений пока нет …