2017-05-05 30 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');