it-swarm.com.de

Angepasste Benutzerrollen erstellen

Ich muss eine benutzerdefinierte Benutzerrolle erstellen, die in der Lage ist, Beiträge (eines bestimmten Beitragstyps) zu erstellen, diese jedoch nicht zu veröffentlichen (genau wie die aktuelle Rolle Kontributor .

Ich bin etwas verwirrt darüber, wie ich eine neue Rolle oder Fähigkeit erstellen soll, um dies zu erreichen. Wie/wo fange ich an?

Vielen Dank

UPDATE: Ich habe diese der benutzerdefinierten Post-Funktion hinzugefügt, wie von Eric Holmes vorgeschlagen

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

Diese wurden zum Aktivierungs-Hook des Plugins hinzugefügt und die entgegengesetzte zum Deaktivierungs-Hook (ich ändere die Contributor-Rolle selbst):

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' );

Jetzt kann nur der Beitragende diesen Beitragstyp bearbeiten, nicht andere Benutzer (zB admin)

Gibt es eine bessere Möglichkeit, ihnen diese Funktionen stapelweise zuzuweisen? Ich habe meinen Aktivierungs-Hook folgendermaßen bearbeitet:

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');
  }  
}

UPDATE 2: Ich habe völlig vergessen, jemanden zu beauftragen, die Beiträge zu löschen. Also habe ich die Funktion aktualisiert:

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');
}

Jetzt kann der Administrator diese Beiträge löschen.

5
RRikesh

Das Hinzufügen einer Rolle ist sehr einfach. Das Erstellen von benutzerdefinierten Funktionen ist ein bisschen mehr, als Sie sich vorzustellen. Wenn Sie Ihren benutzerdefinierten Beitragstyp registrieren , definieren Sie Ihre Fähigkeiten dafür. Im Wesentlichen handelt es sich um eine Reihe von "Was möchten Sie als dies zählen?". Mein Beispiel unten wird diese Aussage verdeutlichen.

$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'
);

Sie würden also "cpt_name" offensichtlich durch den Slug Ihres benutzerdefinierten Post-Typs ersetzen (oder durch alles, was Sie wirklich wollen). Die Elemente auf der linken Seite sind die Standard-Funktionsnamen (es gibt noch weitere, lesen Sie also den Eintrag register_post_type im Codex). Unabhängig von den Funktionen, die Sie in Ihrer benutzerdefinierten Post-Type-Registrierung deklarieren, müssen Sie der Benutzerrolle die folgenden Funktionen zuweisen:

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