2017-05-05 6 views
0

타사 플러그인으로 어리 석음을 해결하려면 구독자 레벨 사용자에게 실제로 원하지 않는 일부 편집 기능을 제공해야했습니다. (이것은 편집 링크에 대한 액세스 권한을 부여하지 않지만 영리한 편집 URL에 직접 액세스 할 수 있습니다.) 내 사이트에는 가입자 및 관리 사용자 만 있으므로 wp-admin의 기능 확인을 수정하여 문제를 해결할 수 있습니다 과 같이, 가입자가없는 추가 기능을 필요로 /post.php :어떻게 Wordpress의 wp-admin/post.php를 영구적으로 수정할 수 있습니까?

if (! current_user_can('edit_post', $post_id)) 
    wp_die(__('Sorry, you are not allowed to edit this item.')); 

가되다 :이 완벽하게 작동,하지만 난 그것을 덮어 필요 할 것이라는 점을 알고있다

if (! current_user_can('edit_post', $post_id) OR ! current_user_can('edit_pages')) 
    wp_die(__('Sorry, you are not allowed to edit this item.')); 

Wordpress가 업데이트 될 때마다 다시해야합니다. 이 수정 프로그램을 필터 등을 통해보다 영구적으로 적용 할 수 있습니까?

답변

1

post.php 파일을 수정할 필요가 없습니다. functions.php에서 다음 코드를 사용하십시오 :

add_filter('user_has_cap',function($allcaps,$need_caps, $args) { 
    if ($_SERVER['SCRIPT_NAME']=='/wp-admin/post.php' && isset($_GET['action']) && $_GET['action']=='edit' && $args[0]=='edit_post' && ! current_user_can('edit_pages')) { 
     foreach ($need_caps as $cap) { 
      unset($allcaps[$cap]); 
     } 
    } 
    return $allcaps; 
},10,3); 
0

위의 설명은 작동합니다 .... 그리고 이렇게하면 함수 파일에 추가하십시오.

function authority_check(){ 
    global $pagenow; 
    if(is_admin() && !current_user_can('manage-capabilities')){ 
     if(in_array($pagenow,array('post.php')) || in_array($pagenow, array('post-new.php'))){ 
      wp_die(__('Sorry, you are not allowed to edit this item.')); 
     } 
    } 
} 
add_action('admin_init', 'authority_check');