편집자가 메뉴를 편집 할 수 있습니까?


46

편집자에게 메뉴 변경 권한을 부여하고 싶습니다.이 작업을 수행 할 수 있습니까?

모양 탭이 전혀 옵션으로 표시되지 않습니다. 그렇게 할 수 있습니까?

답변:


53

이것을 테마에 추가하십시오 functions.php:

// add editor the privilege to edit theme

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

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

1
get_role은 클래스입니까?
Mild Fuzz 2013

4
@Mild Fuzz-아니요는 아니지만 인스턴스를 반환합니다WP_Role
TheDeadMedic

8
내가 이해하는 한 db 쓰기가 발생하기 때문에 모든 요청에 ​​대해이 작업을 수행하지 않아야합니다. 더 나은 admin_init그리고 만if !$role_object->has_cap('edit_theme_options')
jsphpl

이 설정은 데이터베이스 (wp_options, 필드 wp_user_roles 테이블)에 저장되므로 테마 / 플러그인 활성화시이를 실행하는 것이 좋습니다.
Pim Schaaf

또는 functions.php에 추가하고 한 번 실행 한 다음 제거 할 수 있습니다.
d79

18

편집 : WP 4.9 업데이트 및 편집기 메뉴 항목 숨기기

사용자가 탐색 메뉴를 변경할 수 있지만 모양 아래의 다른 옵션은 변경할 수 없도록하려면 다음을 사용하십시오.

// Do this only once. Can go anywhere inside your functions.php file
$role_object = get_role( 'editor' );
$role_object->add_cap( 'edit_theme_options' );

위의 코드는 데이터베이스를 영구적으로 변경하므로 관리자 패널을 새로 고친 후에이 코드 전체를 주석 처리 할 수 ​​있습니다.

이제 편집자에게 보이는 모든 옵션이 표시됩니다. 다음과 같이 다른 옵션을 숨길 수 있습니다.

function hide_menu() {

    if (current_user_can('editor')) {

        remove_submenu_page( 'themes.php', 'themes.php' ); // hide the theme selection submenu
        remove_submenu_page( 'themes.php', 'widgets.php' ); // hide the widgets submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php' ); // hide the customizer submenu
        remove_submenu_page( 'themes.php', 'customize.php?return=%2Fwp-admin%2Ftools.php&autofocus%5Bcontrol%5D=background_image' ); // hide the background submenu


        // these are theme-specific. Can have other names or simply not exist in your current theme.
        remove_submenu_page( 'themes.php', 'yiw_panel' );
        remove_submenu_page( 'themes.php', 'custom-header' );
        remove_submenu_page( 'themes.php', 'custom-background' );
    }
}

add_action('admin_head', 'hide_menu');

hide_menu()함수 의 마지막 3 줄은 내 테마에 맞는 테마입니다. 관리자 패널에서 숨기려는 하위 메뉴를 클릭하여 두 번째 매개 변수를 찾을 수 있습니다. 그러면 URL은 example.com/wp-admin/themes.php?page= yiw_panel 과 같습니다.

따라서이 예에서 remove_submenu_page()함수 의 두 번째 매개 변수는yiw_panel


1
이것은 관리자에게도 테마를 숨 깁니다.
JorgeLuisBorges

12

WordPress 3.8에서는 현재 허용되는 답변보다 코드가 더 좋습니다.

/**
 * @var $roleObject WP_Role
 */
$roleObject = get_role( 'editor' );
if (!$roleObject->has_cap( 'edit_theme_options' ) ) {
    $roleObject->add_cap( 'edit_theme_options' );
}

3

관리자 메뉴 구조를 보면 링크가 기능 nav-menus.php관련이있는edit_theme_options 것 같습니다 . 이 기능을 포함하도록 편집자 역할을 수정할 수 있습니까? 이것은 또한 위젯을 편집 할 수있는 옵션을 제공합니다. 이것이 문제인지 모르겠습니다. 모든 메뉴 Ajax 기능은이 기능에 의해 제한되므로 메뉴 편집을위한 관리 메뉴 기능을 변경하면 작동하지 않을 수 있습니다.


3

설치 플러그인 "사용자 역할 편집기"-edit_theme_options 켜기-플러그인 설치 관리-편집자를 위해 "위젯"및 "스위치 테마"를 끕니다.)


0

나는 당신의 메뉴가 다음과 같은 방식으로 작동한다는 것을 발견했습니다 : 설치 플러그인 " User Role Editor "그리고 편집자 역할 및 기타 조건을 편집 할 수 있습니다. edit_theme_options를 켜십시오. 그러나 이제 : "테마", "위젯"아래에 "메뉴"-옵션이 표시됩니다. 나를 위해 : "메뉴"를 클릭 한 후 (편집자로) 채워진 옵션이 보이지 않지만 비어 있습니다. 따라서 플러그인 "사용자 역할 편집기"를 비활성화하고 "메뉴"에 대해 채워진 옵션이 올바르게 나타납니다. 플러그인 "사용자 역할 편집기"를 비활성화하면 편집기가 활성화 된 상태로 유지됩니다! 나에게 좋을지도 몰라

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.