ショウジンブログ on Hatena

“お芝居をしないと、この社会では異邦人として扱われるほかない”

管理画面で他者の投稿を見せない@WordPress

WordPressにおいて、通常、投稿者や寄稿者(の権限グループに属する)ユーザーは他者の投稿を編集、削除することは出来ません。

ですが、その存在を投稿済みの一覧から確認することは出来ます。

これだと自分の投稿の中から特定の投稿を探したいときに探す手間がかかるので、自分の投稿だけが投稿一覧に表示される(それ以外は見えない)ようにするカスタマイズです。

*実際の用途、必要となるケースとしては複数人で運用しているWordPressサイト、複数のユーザーが投稿するような場合になるかと思います。

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;
}
add_filter('views_edit-post', 'show_owned_posts_only'); /* カスタム投稿の場合は「edit-post」の「post」部分をカスタム投稿のスラッグに変更 */

これだけだと、自分の投稿がまだ0件の場合、他者の投稿一覧が見えるので、それを非表示にするために次の記述を追加します。

/*-------------------------------------------*/
/* 投稿が0件でも他者の投稿一覧が見えないように
/*-------------------------------------------*/
function hide_other_posts($wp_query) {
    global $current_screen, $current_user;

    if($current_screen->id != "edit-post") { /* カスタム投稿の場合は「-post」の「post」部分をカスタム投稿のスラッグに変更 */
        return;
    }

    if(!$current_user->roles[0] == "author") { /* 対象とするユーザーグループを指定 */
        return false;
    }

    $wp_query->query_vars['author'] = $current_user->ID; /* 対象とするユーザーグループを指定 */
}
add_action('pre_get_posts', 'hide_other_posts');

この記述では最後に対象とするユーザーグループを「投稿者=author」に指定しています。(他のユーザーグループも同様に指定できます)

また、この例ではデフォルトの投稿を対象にしていますが、コード内のコメントにあるように、記述を変えることでカスタム投稿タイプも対象とすることが出来ます。