,,,

この記事は最終更新日から2年以上が経過しており、情報が古くなっている可能性があります。

会員制サイトみたいに、ユーザー一人につき特定の一ページのみ編集できるようにしてみます。
必要プラグインは以下の二つ。

  • ・User Role Editor
  • ・WP Admin UI Customize

手順は、まず特定ページのみ編集することができるユーザー権限を設定し、それを適用したユーザーを作成し、最後にそのユーザーが閲覧できる編集ページをカスタマイズすると言う流れです。

1.権限ルール作成
User Role Editorプラグインを有効化すると、左メニューのユーザーのリスト内に「User Role Editor」が追加されるのでこれを押下します。

User Role Editor設定画面の右側に「Add Role」ボタンがあるのでこれをクリックし、Add New Roleウインドウを表示します。
Add New Roleウインドウ内に入力項目があるので、「Role name (ID)」には権限のIDを、「Display Role Name」には権限の名前を、「Make copy of」には設定をコピーする既存の権限(寄稿者で良いと思います)をそれぞれ入力し、「Add Role」ボタンを押します。
これで権限ルールが作成されました。
2.ユーザー作成
左メニューのユーザーボタンから「新規追加」を選びます。
新規ユーザーを追加画面が表示されるので、ユーザー名とE-mail、パスワードを入力し、さらに「権限グループ」のドロップダウンリストから先ほどUser Role Editorにて作成した権限ルールを選択し、「新規ユーザーの追加」ボタンを押します。
3.編集画面のカスタマイズ
WP Admin UI Customizeプラグインを有効化すると、左メニューに「WP Admin UI Customize」ボタンが追加されるのでこれを押下します。

WP Admin UI Customize設定画面が表示されたら、まずは「ユーザー権限グループ」チェックボックスリストに先ほどUser Role Editorにて作成した権限ルール名が記載されているので、そこにチェックして保存してください。
(複数の権限ルールにそれぞれ異なるカスタマイズを行いたい場合は、有料のWP Admin UI Customize Multiple Add-onを購入します)
後は片っ端から非表示設定を行えば、ユーザーに触らせたく無い上のメニューや左メニューまで見えなくなります。
4.ログイン設定
ログイン画面から特定の記事の編集画面へ直接リダイレクトするようにfunctions.phpへコードを書き込みます。
function my_login_redirect($redirect_to, $request, $user) {
if ($user->roles[0] == 'user1'){ //ユーザー1はpost.php?post=user1&action=editページへリダイレクトさせる
return home_url("/wp-admin/post.php?post=user1&action=edit");
} else if ($user->roles[0] == 'user2'){ //ユーザー2はpost.php?post=user2&action=editページへリダイレクトさせる
return home_url("/wp-admin/post.php?post=user2&action=edit");
} else {
return $redirect_to;
}
};
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
5.仕上げ
編集画面に「新規追加」ボタンとかが表示されていると良く無いので、functions.phpにCSSを書き込んで消します。
まずはユーザー権限IDをbodyタグのクラスへ出力するコードを書きます。
function add_user_role_class( $admin_body_class ) {
global $current_user;
if ( ! $admin_body_class ) {
$admin_body_class .= ' ';
}
$admin_body_class .= 'role-' . urlencode( $current_user->roles[0] );
return $admin_body_class;
}
add_filter( 'admin_body_class', 'add_user_role_class' );
次にCSSを書きます。
function wp_adminbar_color() {
echo '<style>
.role-user1 .wrap h1 .page-title-action,
role-user2 .wrap h1 .page-title-action{
display: none;
}</style>';
}
add_action('admin_head', 'wp_adminbar_color');