web-dev-qa-db-ja.com

カスタムユーザロールを作成する

私は(特定の投稿タイプの)投稿を作成することはできるが(ちょうど現在の 投稿者役割 のように)公開することができないカスタムユーザー役割を作成する必要があります。

私はこれを達成するために新しい role または capability を作成する方法について少し混乱しています。どのように/どこから始めますか?

ありがとう

更新: Eric Holmesが提案したように、これらをカスタム投稿機能に追加しました。

'capabilities' => array(
    'edit_posts' => 'edit_helps',
    'edit_post' => 'edit_help',
    'read_post' => 'read_helps',
),

これらをプラグインアクティベーションフックに追加し、非アクティブ化フックに反対のものを追加しました(私はコントリビュータロール自体を変更しています)。

function modify_user_capabilities() {
  $role = get_role( 'contributor' );
  $role->remove_cap( 'delete_posts' );
  $role->remove_cap( 'edit_posts' );
  $role->add_cap('edit_helps');
  $role->add_cap('edit_help');
  $role->add_cap('read_helps');
  }

register_activation_hook( __FILE__, 'modify_user_capabilities' );

この投稿の種類を編集できるのは投稿者だけで、他のユーザーは編集できません(例:admin)

これらの機能を一括して割り当てるより良い方法はありますか?アクティベーションフックを次のように編集しました。

function modify_user_capabilities() {
  $role = get_role( 'contributor' );
  $role->remove_cap( 'delete_posts' );
  $role->remove_cap( 'edit_posts' );

  foreach (array('administrator', 'editor', 'author', 'contributor') as $user_role) {
    $role = get_role($user_role);
    $role->add_cap('edit_helps');
    $role->add_cap('edit_help');
    $role->add_cap('read_helps');
  }  
}

更新2: 私は完全に投稿を削除するために誰かを割り当てることを忘れていました。だから私は機能を更新しました:

function modify_user_capabilities() {

  //remove the contributor from editing any post
  $role = get_role( 'contributor' );
  $role->remove_cap( 'delete_posts' );
  $role->remove_cap( 'edit_posts' );

  foreach (array('administrator', 'editor', 'author', 'contributor') as $user_role) {
    $role = get_role($user_role);
    $role->add_cap('edit_helps');
    $role->add_cap('edit_help');
    $role->add_cap('read_helps');
  }
  //let admins delete posts
  $role = get_role('administrator');
  $role->add_cap('delete_helps');
  $role->add_cap('delete_publised_helps');
  $role->add_cap('delete_others_helps');
  $role->add_cap('delete_help');
}

これで管理者はこれらの投稿を削除できます。

5
RRikesh

role を追加するのはとても簡単です。カスタム機能を作成することは、もう少し頭を包み込むためのものです。あなたが あなたのカスタム投稿タイプを登録するとき あなたはそれに対するあなたの能力を定義します。基本的にそれは「あなたはこれとして何を数えたいのですか?」の配列です。以下の私の例はこの文を明確にするでしょう。

$caps = array(
    'edit_post' => 'edit_cpt_name',
    'edit_posts' => 'edit_cpt_names',
    'manage_posts' => 'manage_cpt_names',
    'publish_posts' => 'publish_cpt_names',
    'edit_others_posts' => 'edit_others_cpt_names',
    'delete_posts' => 'delete_cpt_names'
);

だから、あなたは明らかに "cpt_name"をあなたのカスタム投稿タイプのスラッグ(あるいはあなたが本当に欲しいもの)で置き換えるでしょう。左側の項目はデフォルトの機能名です(他にもありますので、コーデックスのregister_post_typeエントリを参照してください)。カスタム投稿タイプ登録で宣言した機能が何であれ、それらの機能をユーザーロールに付与する必要もあります。

add_role('basic_contributor', 'Basic Contributor', array(
    'read' => true,
    'edit_posts' => false,
    'edit_cpt_name' => true, // True allows that capability
    'edit_cpt_names' => true,
    'publish_cpt_names' => true,
    'edit_others_cpt_names' => false, // Use false to explicitly deny
    'delete_cpt_names' => false
));
2
Eric Holmes