현재 사용자가 관리자 또는 편집자 인 경우
-
-
`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 } ?>
두 개 이상의 역할을 확인하려면 현재 사용자의 역할이 다음과 같은 역할 배열 내에 있는지 확인할 수 있습니다.
$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 () : Argument # 2isnot an array`라는 PHP 경고가 표시됩니다.확인중인 사용자에게 역할이 하나만 있기 때문입니까?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 개발자는이 답변에 동의합니다.가능한 한 역할 검사를 피하고 기능을 사용해야합니다.저는 현재 '읽기'캡만있는 여러 역할로 프로젝트를 진행하고 있습니다.유일한 해결책은 나를위한 역할 검사입니다.죄송합니다. 링크를 찾을 수 없습니다. WP Github에 대한 공개 토론이었습니다.**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
-
@Viktor Borí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
위 솔루션 질문에 대한 정답은else 프로그래밍 기본입니다.
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
현재 로그인 한 사용자가 관리자인지 편집자인지 어떻게 확인할 수 있나요?
각 작업을 개별적으로 수행하는 방법을 알고 있습니다.
하지만 함께 작업하려면 어떻게해야합니까?즉,사용자가 관리자 또는 편집자입니까?