2017-05-05 5 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'); 
関連する問題