WordPressサイトの管理者以外は自分だけの投稿一覧を表示させるカスタマイズ方法

WordPressサイトの管理者以外は自分だけの投稿一覧を表示させるカスタマイズ方法

記事内に広告を含む場合があります

WordPressサイトのアカウント権限は、管理者、編集者、投稿者、寄稿者、購読者とあります。

記事の執筆を外注する場合は、自分は管理者権限で、外注ライターは投稿者権限で運用するのが一般的ですが、投稿者権限だとビジュアルエディタで表示が崩れたり、メディアがアップできなかったり、思うような挙動をしないことがあります。

そんな時に、外注ライターには、投稿者権限ではなく編集者権限を付与することで解決できますが、すべての投稿一覧が表示されてしまいます。

この記事では、編集者権限を付与していても、投稿一覧はそのアカウントのみを一覧表示させることができるカスタマイズ方法をまとめています。

WordPressの投稿者権限で発生する問題

AddQuicktagを使った運用に問題が発生する

コンテンツ作成を便利にする『AddQuicktag』を使って、下線やマーカーを設定する方法をしている人は多いと思いますが、管理者権限や編集権限では問題ないものの、投稿者権限では問題が発生することが確認できました。

//消えないタグ
<span style="border-bottom: 2px solid #ff3333; font-size: 120%;"><strong>テキスト</strong></span>

//消えてしまうタグ
<span style="background: linear-gradient(transparent 60%, #ffcedb 60%);">テキスト</span>

AddQuicktagでこちらの文字装飾を運用していたのですが、管理者権限や編集者権限では全く問題なかったのに、投稿者権限だと、文字装飾が消えてしまうことがわかりました。

なぜ消えてしまうタグと消えないタグがあるのか、いろいろ調べたのですが、わたしでも確実な情報はわかりませんでした。

自分がアップしたメディアしか表示されない

管理者権限や編集者権限であれば、メディアフォルダにアップロードした画像は全部表示され、それぞれの投稿ページや固定ページで使用することができますが、投稿者権限だと自分がアップロードした画像だけしか表示されません。

これは、もともとわかっていたのですが、外注ライターにテキストコンテンツだけでなく画像コンテンツもしてもらう場合には、ちょっとめんどくさいと思っていました。

補足説明
投稿者権限でもすべてのメディアへのアクセス権を付与する場合は、以下のコードをfunctions.phpに追記すれば表示できます。

ですから、外注ライターを投稿者権限に設定したまま、メディアフォルダへのアクセスを付与することは、そんなに難しくありません。

//投稿者権限でもすべてのメディアを表示させる
if ( current_user_can('contributor') && !current_user_can('upload_files') ){
    add_action('admin_init', 'allow_contributor_uploads');
}
function allow_contributor_uploads() {
    $contributor = get_role('contributor');
    $contributor->add_cap('upload_files');
}

編集者権限のアカウントの投稿一覧で自分のアカウント記事のみ表示させるイメージ

外注ライターを編集者権限に設定して、投稿一覧で自分の記事しか表示させなくするカスタマイズ方法をまとめました。

カスタマイズ前のイメージ

上の画像は、仮のサイトですが、編集者権限のアカウントが、A、B、C、Dと4名いた場合、編集者アカウントAがログインして投稿一覧を表示させた場合のイメージです。

これだと、編集者アカウントのAは、どれが自分の担当記事か、わかりにくいです。

また他の編集者アカウントの記事情報を見せたくない場合は、この運用だとダメです。

補足説明
記事一覧の作成者にある欄で、自分のアカウントをクリックすると、そのアカウントの投稿一覧を表示させることはできます。

ただし『すべて』をクリックすると、投稿一覧は管理者権限と同じ状態で確認することができます。

カスタマイズ後のイメージ

カスタマイズ後

カスタマイズすると、編集者アカウントAが、ログインしている場合は、Aの投稿一覧しか表示されなくなります。

これだと、編集者アカウントのAは、自分の担当記事がそれだかわかりやすいです。(※表示されているものすべてが担当記事という認識です。)

またすべてをクリックしても、他の編集者アカウントの記事(他の管理者、投稿者、寄稿者の記事も)一覧で確認することはできません。

編集者権限のアカウントの投稿一覧で自分のアカウント記事のみ表示させるカスタマイズ方法

管理画面の投稿一覧をログイン中のユーザーの投稿のみに制限する方法

以下のコードを、functions.phpに追記するだけで、今回の実装ができます。

// 管理画面の投稿一覧をログイン中のユーザーの投稿のみに制限する(管理者以外)
function pre_get_author_posts( $query ) {
    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() );
        unset($_GET['author']);
    }
}
add_action( 'pre_get_posts', 'pre_get_author_posts' );
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;
  }
  $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;
}
add_filter( 'wp_count_posts', 'count_author_posts', 10, 3 );

これをそのままコピー&ペーストでfunctions.phpに追記すれば実装できます。

編集者権限でも自分がアップしたメディアにしか表示されないようにする方法

編集者権限だと、全部のメディアにアクセスができます。

これを投稿者権限のように、自分がアップロードしたメディアしか表示できないようにするには、以下のコードを、さきほど追加した下に追記すればできます。

//編集者権限でも自分がアップしたメディアにしか表示されないようにする
if (! current_user_can('administrator') ) {
function display_only_self_uploaded_medias( $query ) {
  if ( $user = wp_get_current_user() ) {
    $query['author'] = $user->ID;
  }
  return $query;
}
add_action( 'ajax_query_attachments_args', 'display_only_self_uploaded_medias' );
}

投稿者権限のような、自分がアップロードしたメディアしか表示されないようにしたければ、やってみてください。

まとめ

このような実装の需要は少ないと思いますが、WordPressサイトでアカウント権限を細かく設定して、運用しているなら可能性があると思い、記事にまとめました。

外注ライターが投稿者権限で問題なければ、このようなカスタマイズをする必要がありませんが、外注ライターのレベルがそこまで高くない場合は、ビジュアルエディタで表示が崩れたりしたら、心が折れますよね。

また普段は管理者権限しか使わないサイト管理者は、この問題を気づいていない人も多いでしょう。

補足情報
今回のカスタマイズをしても、これまでどおり管理者権限にはまったく影響はありません。

管理者権限であれば、すべての寄稿者、投稿者、編集者の投稿一覧を見ることができます。

WordPressの投稿者権限を使っているなら、一度確認してみてください。

参考になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です