管理バーにアイテムを追加しようとしていますが、プラグインのadd_movies
などの特定の機能を持つユーザーのみに限定しています。問題は、 @ toscho と @ TheDeadMedic に従って、プラグインは、current_user_can
を使用するには操作の順序が早すぎてコードを実行します。
if ($user->has_cap('add_movies'))
を使ってみましたがFatal error: Call to a member function has_cap() on a non-object in xxx.
を手に入れました
明白なグローバルを見逃していませんか?それとも解決策はもっと複雑ですか?
このようにプラグインファイルに書き込むだけでは、チェックは早く呼び出されます。
if ( current_user_can( 'add_movies' ) ) {
add_action( 'admin_bar_menu', 'wpse17689_admin_bar_menu' );
}
function wpse17689_admin_bar_menu( &$wp_admin_bar )
{
$wp_admin_bar->add_menu( /* ... */ );
}
プラグインがロードされたときに実行されるため、起動プロセスの非常に早い段階です。
あなたがすべきことは常にアクションを追加することですが、その後アクションのコールバックでcurrent_user_can()
をチェックします。あなたがアクションを実行できない場合は、メニュー項目を追加せずに戻るだけです。
add_action( 'admin_bar_menu', 'wpse17689_admin_bar_menu' );
function wpse17689_admin_bar_menu( &$wp_admin_bar )
{
if ( ! current_user_can( 'add_movies' ) ) {
return;
}
$wp_admin_bar->add_menu( /* ... */ );
}
if ( current_user_can('capability') ) : /* your code */; endif;
で試してください
編集:あなたのQを完全に読んでいない。次のことを試しましたか?
global $current_user;
get_currentuserinfo();
// Here you can start interacting with everything the current user has:
echo '<pre>';
print_r($current_user); // show what we got to offer
echo '</pre>';
// Then you'll have to do something with the role to get the caps and match against them