[WordPress]寄稿者ユーザーに他者の投稿を表示させない方法
2015.04
09
寄稿者ユーザーに他者の投稿を表示させない方法について備忘録としてまとめました。フィルターフックとアクションフックを併用して、管理画面の投稿一覧に関する表示制御を行っています。
寄稿者の権限で投稿を受け付ける場合、その人以外の投稿を見せないようにするためには、フィルターフックとアクションフックの両方を利用する必要があります。
フィルターフック
プラグイン API/フィルターフック一覧 – WordPress Codex 日本語版
WordPress上で投稿データを表示するときなど、何か表示するタイミングで独自のプログラムを実行させることができます。
アクションフック
プラグイン API/アクションフック一覧 – WordPress Codex 日本語版
WordPress上で投稿ボタンを押したときなど、何か動作が発生したタイミングで独自のプログラムを実行させることができます。
要件
- 投稿一覧で「すべて」「公開済み」などの投稿状態フィルタを非表示にする
- 寄稿者が自分の投稿数0件の状態でも、投稿一覧で他者の投稿が見えないようにする
上記を満たすために、フィルターフックとアクションフックをテーマ内のfunctions.phpに記述していきます。
実装
投稿一覧で「すべて」「公開済み」などの投稿状態フィルタを非表示にする
function show_owned_posts_only( $views ) {
unset($views['all']); // すべて
unset($views['draft']); // 下書き
unset($views['publish']); // 公開済み
unset($views['pending']); // 保留中
unset($views['trash']); // ゴミ箱
return $views;
}
// views_edit-[post_type] カスタム投稿タイプの場合は、投稿タイプを指定する
add_filter('views_edit-xxxxx', 'show_owned_posts_only');
投稿状態フィルタそれぞれの内容はコールバック引数で受け取る、$viewsに入っています。unset()で要素を削除することで制御できます。
今回はすべての要素を非表示にすることで、「所有」という自分の投稿数のみ表示されるようになります。
注意点としては、CODEXにある「views_edit-post」は「投稿(投稿タイプ=post)一覧」のフィルターフックだという点です。カスタム投稿タイプを利用する場合は、「views_edit-hoge」のように投稿タイプ名に置き換える必要があります。
寄稿者が自分の投稿数0件の状態でも、投稿一覧で他者の投稿が見えないようにする
function hide_other_posts($wp_query) {
global $current_screen, $current_user;
if($current_screen->id != "edit-xxxxx") {
return;
}
if(!$current_user->roles[0] == "contributor") {
return false;
}
$wp_query->query_vars['author'] = $current_user->ID;
}
add_action('pre_get_posts', 'hide_other_posts');
フィルターフックで投稿状態フィルタを非表示したとしても、寄稿者の投稿数が0件の状態で投稿一覧にアクセスすると、他者の投稿が見えてしまいます。
pre_get_postsアクションフックを使い、ある特定の画面(この場合はカスタム投稿タイプの投稿一覧)で、ログインしているユーザー(この場合は寄稿者)の投稿のみ取得しています。
$current_screenと$current_userで現在表示している画面とログインしているユーザーを特定しています。
ユーザーを特定できれば、$wp_queryからauthorパラメータで投稿を絞り込むことができます。
参考
- WordPress – 自分が投稿したものだけ管理画面で表示する – Qiita
- [WordPress] 投稿一覧にエクスポートリンクを追加する | memo.dogmap.jp
- WordPressの投稿一覧画面の状態フィルタの箇所を変更する方法 – Liberty Quest
- views_edit-post | Filter Hooks | trepmal*