Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@halhide

自分が投稿したものだけ管理画面で表示する

More than 5 years have passed since last update.

管理者以外のユーザにいろいろ投稿させるサイトを作るときにきっとやりたくなるので、ちょっと調べてみた。

権限でedit_other_XXXをつけなければ、自分が作ったもの以外は編集できないのだけど、リスト上ではほかのユーザの投稿が見れるし、リスト上部の「すべて」とかの横に表示される投稿件数も自分以外の投稿を含めた結果になってしまう。これは、wordpressの事情を知らない普通のユーザからすれば違和感のある画面である。

以下の二つのfilterとactionでそれを回避できる。

まずは、投稿リストの「すべて」とかのリンクを出さないようにする。

管理画面のリスト上部のリンクは、

$views = apply_filters( 'views_' . $this->screen->id, $views );

された結果が表示される。この$viewsには、"mine"や"all"といったリスト表示内容を表すキーに対して、一覧へのリンク文字列が格納されている。

なので、viewsから"mine"以外のリンクを取り除いた配列を返すフィルターを設定する。こうすると、"所有"というリンクしか表示されなくなる。

既に自分が投稿しているものがあるときは、これだけで投稿リスト上には自分の投稿しか出なくなる(つまり所有リンクがクリックされた状態になっている。

しかし、自分の投稿が一件もないときは、他人の投稿のリストが表示されてしまうので、まだ目的は達成できていない。

そこで、実際に自分の投稿のみに限定するために、'pre_get_posts"アクションに以下のアクションを設定する。

function filter_other_post( $wp_query ) {
    global $pagenow, $current_user;

    if($pagenow != 'admin-ajax.php' && $pagenow != "edit.php" ) {
        return;
    }

    if($current_user->roles[0] == "administrator") {
        //管理者はすべて閲覧可能
        return;
    }

    $wp_query->query_vars['author'] = $current_user->ID;
}

管理画面からのajaxでの取得(写真を記事に挿入するときの画像一覧とか)と、投稿画面の時のみフィルターするようにしている。そうしないと、トップページやアーカイブページでもフィルターが効いてしまい、投稿がない状態として処理されてしまう。

これで、とりあえず管理画面を普通に触っている分には、他人の投稿は存在しないかのような画面を見せることができる。

17
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
halhide
rubyとかjavascriptとか。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?