Я не понимаю логику функции WordPress ‘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), а если передано NO $ user_id, то мы должны вызвать wp_get_current_user (), например, так:

$user = $user_id ? get_userdata($user_id) : wp_get_current_user();

Все это сравнение $ user_id == get_current_user_id () просто добавляет дополнительную работу, верно? Каковы некоторые возможные причины написания этой функции?

1

Решение

! $ user_id || $ user_id == get_current_user_id ()
Оператор is равен true, поэтому, если функция вызывается с user_id для false, ИЛИ если переданный user_id фактически является текущим пользователем, эффективнее просто загрузить текущего пользователя. нет запросов к базе данных.

в противном случае, если указан user_id, запрос должен быть запущен, чтобы получить его данные.

логика в порядке 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector