사용자 역할에 기능을 추가하는 방법?


14

Wordpress 네트워크를 관리하고 있으며 미리 정의 된 Admin 사용자 역할에 unfiltered_html 사용자 기능을 추가하고 싶습니다. Wordpress의 표준 설치에서는 관리자 계정에 이미이 기능이 있지만 MU 설치에서는 Super Admins 만이 기능을 사용할 수 있습니다. 워드 프레스 역할 및 기능 .

테마 또는 플러그인 내에서 관리자 역할을 어떻게 보강 할 수 있습니까?


1
wordpress.org/extend/plugins/unfiltered-mu 가 도움이 될 것 같습니다. 그러나 관리자와 편집자에게는 효과적입니다. 원하지 않는 경우 코드를 약간 조정할 수 있습니까?
— Rev. Voodoo


@신부님. 부두 제안 해 주셔서 감사합니다. 이 unfiltered_html는 관리자 또는 최고 관리자 게시물 퍼가기를 할 수있는 기능 이외의 역할을 허용하는 것만으로는 충분하지 않습니다의 핵심은 / 취소 필터링이었다 등의 기능을 추가 워드 프레스 'KSES 후킹 같은 주제에 도움이 되거 도움 : kses_remove_filters를 ()
— Jonnybojangles

세부 블로그 : goo.gl/xNuafH
— Suresh Kamrushi

답변:


14

WP_Role 클래스 를 사용할 수 있습니다 .

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

따라서 관리자가 게시물 내용에 SCRIPT 및 IFRAME 태그를 입력 할 수있게하는 방법에 대한 원래의 질문을 해결하기 위해 멀티 사이트에서 최고 관리자에게만 부여되는 'unfiltered_html'기능을 찾고 있습니다.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

또는 함수에서 한 번만 실행할 수 있습니다.

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));

고마워 필립. WP_Role 클래스와 관련하여 언제 코드를 실행해야합니까? 이것이 전역 역할 객체에 영향을 미치는 것 같아요? 함수 파일에서 한 번만 실행할 수 있다고 언급 한 두 번째 코드 블록을 가져 와서 기쁩니다. 일부 Wordpress 지원 포럼에서 비슷한 솔루션을 찾았지만 테마 또는 플러그인에서 한 번 코드를 실행하는 것이 이상하다고 생각합니다. 특히 변경 사항이 이미 있는지 확인하지 않은 경우. 아마도 역할 쓰기는 실제로 무시할 수 있습니다. 기능을 확인하려면 첫 번째 예에서와 같이 역할에 기능을 작성하십시오.
— Jonnybojangles

또한 우리에게 언제든지 알려 주시면 WP_Role 클래스를 어떻게 실행할지에 관심이 있습니다. 감사합니다
— Osu

1
@Jonnybojagles & @Osu, 이것을 확인하십시오 : 역할 및 기능에 대한
— Philip

나는 이미 내 기사를 읽었지만 그 기사를 다시 살펴볼 기회를 얻었습니다. 감사합니다! 결국, 필터링되지 않은 mu (Voodoo Rev에 의해 언급 됨) 플러그인을 해부 한 후 결국에는 기능을 추가하여 역할을 변경하는 것만으로는 충분하지 않다는 것을 알았습니다. Wordpress의 KSES 필터를 필터링 해제해야했습니다.
— Jonnybojangles

배열의 마지막 요소에 쉼표를 추가하는 것을 선호합니다. 코드가 작동하지 않거나 오류가 발생할 필요가 없기 때문에 관련이 없어 보일 수 있지만 수정을 시각화 할 때 버전 제어를 사용할 때 편리합니다. 이전 행 항목이 삭제되고 다시 추가되고 해당 행에 대한 추가 또는 변경으로 쉼표 만 사용하여 새 항목으로 강조 표시되지 않습니다. 비록 작지만 수정 사항을 분석 할 때 많은 시간을 절약 할 수 있습니다.
— nyedidikeke

2

Super Admin 또는 Admin 이외의 다른 역할 (Wordpress 설치가 네트워크 / MU 인스턴스인지 여부에 따라 다름)이 필터링되지 않은 html을 게시물 또는 댓글에 추가하려면 Wordpress의 KSES 필터를 제거해야합니다.

사용자에게 특정 기능이 있는지 확인하십시오.

if ( current_user_can( 'unfiltered_html' ) ) { … }

그렇다면 KSES를 제거하십시오.

kses_remove_filters();

이 기능은 이미 필터링되지 않은 mu로 래핑되어 관리자와 편집자가 필터링되지 않은 html을 추가 할 수 있습니다.


이 기능은 또한 플러그인 레지스터에 래핑되고 등록 취소되므로 로직이 각 WP 인스턴스에서 수행 될 필요가 없습니다.
— Jonnybojangles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.