2016-04-22 23 views
2

私は最初から管理セクションを作成しています。ユーザーは、管理者権限を持つWordPressサイトのユーザーである必要があります。だから私は現在、ユーザーがユーザー名または電子メールで管理者であることを確認してください

if((!user_pass_ok($user, $pass)){ 
    //login fail 
}else{ 
    //successful login 
} 

を使用してユーザーを認証しています。しかし、私はまた、ユーザーが管理者であるかどうかを知りたいです。私がオンラインで見ていることは、彼らがcurrent_user_can('administrator')を使用していることです。しかし私の場合、ユーザーはまだログインしていません。ユーザーが管理者であるかどうかを確認するには、ユーザーがログイン用に入力したユーザー名/電子メールアドレスが必要です。このユーザーがユーザー名/電子メールで管理者であるかどうかを確認するにはどうすればよいですか?私はコメントuser_pass_ok($user, $pass)で述べたように

+2

user_pass_ok()は非推奨です。代わりにwp_authenticateを使用してください(WP_UserまたはWP_Errorを返すことに注意してください):https://developer.wordpress.org/reference/functions/wp_authenticate/ – edhurtig

答えて

0

wp_authenticateの賛成で廃止されました。

さらに、WordPressにはロールをはるかに超える驚異のCapabilities APIがあります。私は強く読むことをお勧めします。私はWordPressのオプション(管理者の役割から継承されmanage_optionsと呼ばれる機能)を管理するためのユーザーのアクセスを許可したい場合は簡単な例については、私がしなければならないすべてはcurrent_user_can('manage_options')を言うかWP_User->has_cap(...)機能を使用

です。

機能に基づいたマッチングは、ロールのマッチングよりもはるかに柔軟です。たとえば、自分のサイトに「デベロッパー」という2番目の役割があるとします。役割に基づいてアクセスをゲートしていて、デベロッパーの役割のユーザーに機能へのアクセスを許可する場合は、ユーザー権限を確認する必要があるときはいつでも、2番目のチェックを追加する必要があります。($role == 'administrator' || $role == 'developer')

すでにログインしているユーザーは、あなたは常にで自分の能力を確認することができます。

current_user_can('manage_options') // all admins have 'manage_options' 

か、独自のカスタムキャップを定義し、すべての管理者にそれを与える:

function add_custom_admin_caps() { 
    $role = get_role('administrator'); 

    $role->add_cap('access_my_admin_zone'); 
} 
add_action('admin_init', 'add_custom_admin_caps'); 

をして、現在のユーザーに対してカスタムキャップをご確認ください

current_user_can('access_my_admin_zone') 

機能に追加された利点は、WP Adminメニューをレンダリングするとき、あなたの管理セクションが追加_ * _ページ機能(add_menu_page())と 'のような機能の一つの利用登録をした場合、ワードプレスは自動的に現在のユーザーの権限を確認するということですmanage_options'

add_menu_page ($title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position) 

最後には、それはあなたが最初からユーザーにログインしている場合ので、私はこの代替を提案する場合は、ユーザーに自分のログを記録しているかどうかに関して、少し不明であった(すなわち)ワードプレスのログインフォームを使用していない:

$user = wp_authenticate($user, $pass); 

if (is_a($user, 'WP_User') && $user->has_cap('manage_options')) { 
    // success 
} else { 
    // fail 
} 

それが失敗した場合にも、あなたにそれらを指示、その後、ユーザーがログインして権限を持っていることを確認するために、カスタム管理者のすべてのページのロード中current_user_can('manage_options')を呼び出す必要がありますカスタムログインページ...または可能であれば、auth_redirect()のwordpressログインページ。

+0

このコードは機能しません。ユーザーが管理者であるかどうかを確認する前に認証してログインしてください –

+0

ここであなたが達成しようとしているものが少し失われました...キャップを使ってもっと深く掘り下げて答えを更新しました...) add_menu_pageで追加の管理ページ/セクション?もしそうなら、私は最近の私の編集が役立つことを願っています。またはB)あなたは完全に新しいWP管理者を書いているだけで、コア機能を利用していますか? (あなたの 'user_pass_ok'の使い方はこのアプローチに向かっているように思えました) – edhurtig

+0

私はPHPを使用して完全に新しい、ワードプレス以外の管理サイトを作成しています。このサイトは、wordpressを使用して作成されたウェブサイトのデータ管理セクションとして機能します。したがって、そのサイトのユーザーはwp_usersテーブルに保存されます。私がしたいのは、そのテーブルの管理者権限を持つユーザーが自分のサイトにログインできるようにすることだけです。それはそれです –

1
$user = get_userdata($user_id);  
if (in_array('administrator', (array) $user->roles)) { 
    //User has administrator privilidges 
} 
+0

私は推測していますここの '$ user_id'は私がユーザーから得た値です。いいえ、これは動作しません –

+0

エンドユーザからユーザ名を取得する場合は、user_idを見つける必要があります。 – aeonsleo

+0

ですが、 'wp_authenticate($ user、$ pass)'部分はどこに追加しますか? –

関連する問題