現在のユーザーが管理者または編集者の場合
-
-
`if(current_user_can( 'editor')|| current_user_can( 'administrator'))``if( current_user_can('editor') || current_user_can('administrator') )`
- 10
- 2014-01-30
- Shazzad
-
5 回答
- 投票
-
- 2014-01-30
最初の答え.これはPHPのみであるため、WordPress関連ではありません.論理「OR」演算子を使用してください:
<?php if( current_user_can('editor') || current_user_can('administrator') ) { ?> // Stuff here for administrators or editors <?php } ?>
3つ以上の役割を確認する場合は、次のように、現在のユーザーの役割が役割の配列内にあるかどうかを確認できます.
$user = wp_get_current_user(); $allowed_roles = array('editor', 'administrator', 'author'); <?php if( array_intersect($allowed_roles, $user->roles ) ) { ?> // Stuff here for allowed roles <?php } ?>
ただし、
current_user_can
は、ユーザーだけでなく使用できます.役割名だけでなく、機能も備えています.したがって、編集者と管理者の両方がページを編集できるようになると、これらの機能を簡単に確認できるようになります.
<?php if( current_user_can('edit_others_pages') ) { ?> // Stuff here for user roles that can edit pages: editors and administrators <?php } ?>
機能の詳細については、
>こちらをご覧ください. First answer, not WordPress-related because it is just only PHP: Use the logic "OR" operator:
<?php if( current_user_can('editor') || current_user_can('administrator') ) { ?> // Stuff here for administrators or editors <?php } ?>
If you want to check more than two roles, you can check if the roles of the current user is inside an array of roles, something like:
$user = wp_get_current_user(); $allowed_roles = array('editor', 'administrator', 'author'); <?php if( array_intersect($allowed_roles, $user->roles ) ) { ?> // Stuff here for allowed roles <?php } ?>
However,
current_user_can
can be used not only with users' role name, but also with capabilities.So, once both editors and administrators can edit pages, your life can be easier checking for those capabilities:
<?php if( current_user_can('edit_others_pages') ) { ?> // Stuff here for user roles that can edit pages: editors and administrators <?php } ?>
Have a look here for more information on capabilities.
-
`is_logged_in();`かどうかを確認する必要がありますか?do you need to check if `is_logged_in();` ?
- 1
- 2017-05-01
- RobBenz
-
@RobBenzいいえ、いずれの場合も.`current_user_can()`は、ユーザーがログインしていない場合は常にfalseを返し、 `wp_get_current_user()`は、ユーザーがログインしていない場合はロールのないユーザーを返すため、 `array_intersect()`は常にfalseになります.@RobBenz no, in any of the cases. Because `current_user_can()` always returns false if the user is not logged in, and `wp_get_current_user()` will return an user without any role if the user is not logged in, so the `array_intersect()` will always be false.
- 3
- 2017-05-01
- gmazzap
-
`current_user_can()`関数のPHPDocには、「_機能の代わりに特定のロールに対するチェックが部分的にサポートされていますが、信頼性の低い結果が生成される可能性があるため、この方法は推奨されません_」という行があります.したがって、ユーザーの能力をチェックする際にロールを使用しない方がよいと思います:-)In the PHPDoc of the `current_user_can()` function, we can see the line "_While checking against particular roles in place of a capability is supported in part, this practice is discouraged as it may produce unreliable results_". So I think it would be better to avoid using roles while checking for a user's capability :-)
- 3
- 2017-09-01
- Erenor Paz
-
`array_intersect`メソッドを使用すると、サーバーエラーログに` array_intersect():引数#2は配列ではありません `というPHP警告が表示されます.これは、チェックしているユーザーの役割が1つしかないためですか?When I use the `array_intersect` method, I get a PHP warning in our server error log saying `array_intersect(): Argument #2 is not an array`. Is this because the user(s) it's checking only have one Role?
- 0
- 2018-01-23
- Garconis
-
@Garconisは通常、配列である必要があります.何らかの理由で、あなたは配列ではないようです.`array_intersect($ allowed_roles、(array)$ user-> roles)`は問題なく動作します.@Garconis normally it should be an array. For some reason it seems for you is not an array. `array_intersect($allowed_roles, (array)$user->roles )` will work with no issues.
- 0
- 2018-01-25
- gmazzap
-
役割に対してチェックするのではなく、機能に対してチェックすることをお勧めします.一連の役割の機能を削除または追加する方が簡単です...より明確です.たとえば、 `current_user_can( 'edit_orderform')` ...おそらく、営業担当者は注文フォームのみを編集できる必要があります...ただし、コンテンツを追加する権限はありません.その機能を明示的に付与することは、ユーザーの役割よりも明示的なアクセス許可構造です.大規模な組織では、人々は複数の帽子をかぶっています.単に読むだけではなく、より多くのアクセス権を持つサブスクライバーを持つことができます.I'd advise against checking against roles... and rather against capabilities. It's easier to remove or add a capability to a set of roles... it's more explicit. `current_user_can('edit_orderform')` for example... maybe a Salesrep should ONLY be able to edit the order form... but not have the rights to add content. Explicitly granting that capability is a more explicit permissions structure than what role a user is. People wear multiple hats in larger organizations. you can have subscribers that have more access than just reading.
- 0
- 2019-05-13
- Armstrongest
-
- 2019-01-06
まず、
current_user_can()
を使用してユーザーの役割を確認しないでください.ユーザーに特定の機能があるかどうかを確認するために使用する必要があります.次に、ユーザーの役割に関心を持たずに機能に焦点を当てるのではなく、元の質問で尋ねられた問題(ユーザーが管理者であるかどうかを確認する)のようなことを気にする必要はありません.編集者).代わりに、
current_user_can()
が意図したとおりに使用されていた場合、つまり、ユーザーの役割ではなく、ユーザーの機能をチェックする場合は、条件付きチェックに条件チェックを含める必要はありません.「または」(||)テスト.例:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pagesは、管理者と編集者の両方の役割の機能ですが、作成者などの下位の役割ではありません.これが、
current_user_can()
の使用目的です.First,
current_user_can()
should not be used to check a user's role - it should be used to check if a user has a specific capability.Second, rather than being concerned with the user's role but instead focusing on capabilities, you don't have to bother with doing things like the problem asked about in the original question (which is checking if the user is an administrator OR an editor). Instead, if
current_user_can()
was being used as intended, which is to check for a user's capabilities, not their role, you wouldn't need the conditional check to contain an "or" (||) test. For example:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages is a capability of both administrator and editor roles, but not any lower roles such as authors. This is how
current_user_can()
was intended to be used.-
**注意**:高レベルのWP開発者はこの回答に同意します.可能な限り役割チェックを避け、機能を使用するようにしてください.私は現在、「読み取り」キャップしかない複数の役割を持つプロジェクトに取り組んでいます.唯一の解決策は、私にとっての役割チェックです.申し訳ありませんが、リンクが見つかりません.WPGithubでのオープンディスカッションでした.**Please note**: High level WP devs agree with this answer. You should try to avoid role checking as much as possible, use capabilties. I'm currently working on a project with multiple roles that only have the 'read' cap. The only solution is role checking for me. Sorry, I can't find the link, it was an open discussion on the WP Github.
- 3
- 2019-04-26
- Bjorn
-
これは受け入れられた答え、IMOでなければなりません.`current_user_can`は通常、役割ではなく機能に使用する必要があります.This should be the accepted answer, IMO. `current_user_can` should generally be used for capabilities, not roles.
- 1
- 2019-05-13
- Armstrongest
-
これに+1し、 `current_user_can()`を介してロールをチェックすることは避けてください.キーでロールをチェックしたい場合は、キャップチェックの代わりにロールチェックを実行してください:)+1 to this, avoid checking roles via `current_user_can()`. If you want to check roles by key then perform a role check instead of a cap check :)
- 0
- 2020-03-05
- William Patton
-
では、ユーザーの役割を明示的かつ安全にチェックするための適切な機能は何ですか?それを見つけるのは少し難しいようです(存在する場合).@ビョルンWhat is the proper function then, for checking user roles explicitly & safely? It seems, it's a bit hard to find that (if exists). @Bjorn
- 0
- 2020-04-15
- Viktor Borítás
-
@ViktorBorításこのページには複数の有効な解決策があります.ただし、 `current_user_can()`がオプションでない場合にのみ使用してください.また、私のコメントはよりセキュリティに基づいています.たとえば、特定のユーザーのコンテンツを制限する場合、ほとんどの場合、このタスクには機能チェックで十分です.@Viktor Borítás There are multiple valid solutions on this page. But only use them if `current_user_can()` is not an option. Also, my comment is more security based. For example, if you want to restrict content for specific users in most cases a capability check is sufficient for this task.
- 1
- 2020-04-16
- Bjorn
-
- 2019-08-26
@butlerblogの返信で述べられているように、 current_user_canを使用して役割を確認しないでください
この通知は、
によって呼び出されるhas_cap
current_user_can
関数のPHPドキュメントに具体的に追加されています.機能の代わりに役割をチェックすることは部分的にサポートされていますが、信頼性の低い結果が生じる可能性があるため、この方法はお勧めしません.
これを行う 正しい 方法は、次のように、ユーザーを取得して
$user->roles
を確認することです.if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ) { $user = get_userdata( get_current_user_id() ); if( ! $user || ! $user->roles ){ return false; } if( is_array( $role ) ){ return array_intersect( $role, (array) $user->roles ) ? true : false; } return in_array( $role, (array) $user->roles ); } }
これを行うために使用するいくつかのヘルパー関数があります(現在のユーザーだけが必要ない場合もあるため):
if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ return user_has_role_by_user_id( get_current_user_id(), $role ); } } if( ! function_exists( 'get_user_roles_by_user_id' ) ){ function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; } } if( ! function_exists( 'user_has_role_by_user_id' ) ){ function user_has_role_by_user_id( $user_id, $role ) { $user_roles = get_user_roles_by_user_id( $user_id ); if( is_array( $role ) ){ return array_intersect( $role, $user_roles ) ? true : false; } return in_array( $role, $user_roles ); } }
次に、これを行うことができます:
current_user_has_role( 'editor' );
または
current_user_has_role( array( 'editor', 'administrator' ) );
As @butlerblog reply stated, you should not use current_user_can to check against a role
This notice is specifically added in the PHP documentation of
has_cap
function which is called bycurrent_user_can
While checking against a role in place of a capability is supported in part, this practice is discouraged as it may produce unreliable results.
The CORRECT way to do this is to get the user and check the
$user->roles
, like this:if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ) { $user = get_userdata( get_current_user_id() ); if( ! $user || ! $user->roles ){ return false; } if( is_array( $role ) ){ return array_intersect( $role, (array) $user->roles ) ? true : false; } return in_array( $role, (array) $user->roles ); } }
Here's some helper functions I use to do this (as sometimes i don't want just current user):
if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ return user_has_role_by_user_id( get_current_user_id(), $role ); } } if( ! function_exists( 'get_user_roles_by_user_id' ) ){ function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; } } if( ! function_exists( 'user_has_role_by_user_id' ) ){ function user_has_role_by_user_id( $user_id, $role ) { $user_roles = get_user_roles_by_user_id( $user_id ); if( is_array( $role ) ){ return array_intersect( $role, $user_roles ) ? true : false; } return in_array( $role, $user_roles ); } }
Then you can just do this:
current_user_has_role( 'editor' );
or
current_user_has_role( array( 'editor', 'administrator' ) );
-
- 2016-09-29
<?php if( current_user_can('editor')) : echo "welcome"; elseif( current_user_can('member')) : echo "welcome"; else : wp_die("<h2>To view this page you must first <a href='". wp_login_url(get_permalink()) ."' title='Login'>log in</a></h2>"); endif; ?>
<?php if( current_user_can('editor')) : echo "welcome"; elseif( current_user_can('member')) : echo "welcome"; else : wp_die("<h2>To view this page you must first <a href='". wp_login_url(get_permalink()) ."' title='Login'>log in</a></h2>"); endif; ?>
-
それがOPにどのように役立つかを説明できれば素晴らしいと思います.It would be great if you could explain as how it helps OP.
- 1
- 2016-09-29
- bravokeyl
-
このコードをgeneric-page.phpに直接投稿できる「編集者」または「メンバー」のみのページを表示することを許可できます.You can allow to see the page only "editor" or "member" you can post this code direct in generic-page.php
- 0
- 2016-09-29
- seowmx
-
コードを落とさないでください.コメントと、これが質問者の問題をどのように解決するかについての説明を追加します.Please don't just drop code. Add comments and some explanation how this solves the askers problem.
- 5
- 2016-09-29
- kraftner
-
それで、あなたの答えは、各役割のコードの重複ですか?So your answer is code duplication for each role?
- 0
- 2019-10-22
- Julix
-
- 2020-06-03
上記の解決策に対する正解-質問は、基本的なプログラミングによるものです:
if( current_user_can('administrator')) { <!-- only administrator will see this message --> } else { if( wp_get_current_user('editor')) { <!-- only editor but no administrator will see this message --> ?> <style type="text/css">#perhapsDIVremovalidentifier{ display:none; </style> } <?php } else { <!-- the user is neither editor or administrator --> }}
概要:管理者が見つかりましたが、エディターをプッシュすると管理者も見つかりました.そのため、管理者にパススルーさせ、編集者のみを識別させます.
CPUコードの使用を最小限に抑えるために、常にこのコードを使用して上記のコードを呼び出す必要があることに注意してください.
if(is_user_logged_in()){}
The correct answers to the above solution-question are by else programming basic:
if( current_user_can('administrator')) { <!-- only administrator will see this message --> } else { if( wp_get_current_user('editor')) { <!-- only editor but no administrator will see this message --> ?> <style type="text/css">#perhapsDIVremovalidentifier{ display:none; </style> } <?php } else { <!-- the user is neither editor or administrator --> }}
Brief: The administrator is found, but if we push editor the administrator is as well found. So we just let the administrator pass through and identify the editor only.
Remember you should always use this code to call that above to minimize cpu code usage:
if(is_user_logged_in()){}
-
それはまさに**質問**で述べられていることであり、作者が望んでいないことです.That is exactly what is stated in the **question**, and what the author doesn't want.
- 0
- 2020-06-03
- fuxia
-
誤解がないように簡単な説明を追加しました.私が信じている他のルールに従うのは難しかった.I've added brief so that we have no misunderstanding. It was hard to follow the else rules I believe.
- 0
- 2020-06-04
- Dealazer
現在ログインしているユーザーが管理者か編集者かを確認するにはどうすればよいですか?
それぞれを個別に行う方法を知っています:
しかし、どうすればそれらを一緒に使用できますか?つまり、ユーザーは管理者ですか、それとも編集者ですか?