web-dev-qa-db-ja.com

特定のユーザーに対して特定のページへの管理者アクセスを制限する

タイトルが言うように、私は特定のユーザーに対して特定のページへのバックエンドアクセスを制限したいと思います。

45〜50ページのサイトを作成している間に、[ページ]メニューにユーザーが変更/更新できるページのみが表示されていれば、はるかに優れたユーザーエクスペリエンスになると思いました。

私は役に立ちませんでした以下のプラグインを試してみました。 Advanced access managerは機能を持っていますが動作しません/ 3.5.1ではバグがあります。

http://wordpress.org/extend/plugins/advanced-access-managerhttp://wordpress.org/extend/plugins/role-scoperhttp://wordpress.org/ extend/plugins/adminimizehttp://wordpress.org/extend/plugins/s2member

Functions.phpのコードスニペット?

4
BoBoz

このコードは私にとってはうまく機能するようです(functions.php):

add_filter( 'parse_query', 'exclude_pages_from_admin' );

$user_id = get_current_user_id();

if ($user_id == 2) {
    function exclude_pages_from_admin($query) {
        global $pagenow,$post_type;
        if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
            $query->query_vars['post__not_in'] = array('123','234','345');
        }
    }
}
5
BoBoz

それは私にコメントさせないので、私はこれを新しい答えとして加えています。

エラー:

警告: "call_user_func_array()はパラメータ1が有効なコールバックであることを期待しています、>関数 'exclude_pages_from_admin'が見つからないか無効な関数名です".

これは、user_idがチェックされた後にだけ呼び出される関数によるものです。あなたがそのユーザとしてログインしていないのであれば、その関数は存在せず、フィルタはそのエラーを返します。それはその関数を探しているのですが見つけられないからです。

だからそれはする必要があります:

add_filter( 'parse_query', 'exclude_pages_from_admin' );

function exclude_pages_from_admin($query) {
    $user_id = get_current_user_id();

    if ($user_id == 2) {
    global $pagenow,$post_type;
     if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
     }
    }
}
2
ben_jamin