2017-02-01 8 views
1

「is_super_admin」WordPressの機能のロジックを理解していない:私は現在、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; 
} 

私はまだ初心者プログラマですこれは、ばかな質問かもしれませんが、その最初のロジックは... 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が渡された場合、我々は($ USER_ID)get_userdataを呼び出す必要がありますし、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が指定されている場合は、そのデータを取得するためにクエリを実行する必要があります。

論理はOKです。

関連する問題