管理画面の投稿一覧の投稿をログイン中のユーザーの投稿のみにする
WordPressの管理側の投稿一覧では、どの権限のユーザーでログインしても他のユーザーの投稿を含めた一覧が表示されます。
管理者以外は管理画面の投稿一覧を自分のもののみ(ログイン中のユーザーの投稿のみ)にするには、functions.phpに下記のように記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
/** * 管理画面の投稿一覧をログイン中のユーザーの投稿のみに制限します。(管理者以外) */ function pre_get_author_posts( $query ) { // 管理画面 かつ 非管理者 かつ メインクエリ // かつ authorパラメータがないかauthorパラメータが自分のIDの場合、 // 投稿者を絞った状態を前提として表示を調整します。 if ( is_admin() && !current_user_can('administrator') && $query->is_main_query() && ( !isset($_GET['author']) || $_GET['author'] == get_current_user_id() ) ) { // クエリの条件を追加 $query->set( 'author', get_current_user_id() ); // 値があると WP_Posts_List_Table#is_base_request() がfalseになり // 「すべて」のリンクが選択表示にならないため削除 unset($_GET['author']); } } add_action( 'pre_get_posts', 'pre_get_author_posts' ); /** * ログイン中のユーザーが投稿した投稿数を取得します。 * ※ wp_count_posts()をベースにして下記を行っています。 * 1. フィルターの削除 (無限ループを防ぐ) * 2. キャッシュキーの変更 (変更が反映されない問題を防ぐ) * 3. SQLの変更 */ function count_author_posts( $counts, $type = 'post', $perm = '' ) { // 管理画面側ではない場合、または管理画面側でも管理者の場合は投稿数を調整せず終了します。 if ( !is_admin() || current_user_can('administrator') ) { return $counts; } global $wpdb; if ( ! post_type_exists( $type ) ) return new stdClass; $cache_key = _count_posts_cache_key( $type, $perm ) . '_author'; // 2 $counts = wp_cache_get( $cache_key, 'counts' ); if ( false !== $counts ) { return $counts; // 1 } // 3 $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s"; $query .= $wpdb->prepare( " AND ( post_author = %d )", get_current_user_id() ); $query .= ' GROUP BY post_status'; $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A ); $counts = array_fill_keys( get_post_stati(), 0 ); foreach ( $results as $row ) { $counts[ $row['post_status'] ] = $row['num_posts']; } $counts = (object) $counts; wp_cache_set( $cache_key, $counts, 'counts' ); return $counts; // 1 } add_filter( 'wp_count_posts', 'count_author_posts', 10, 3 ); |
結果
「すべて」「公開済み」などのリンクに表示される投稿数もユーザーの投稿数に調整されます。
更新履歴
- 2017/08/10 コメントからのご指摘をもとにコードの修正を行いました。(9行目の閉じ括弧が1つ抜けておりました。ご指摘ありがとうございました)
- 2016/04/10 初版