Seltsame Fähigkeiten / Rollenverhalten

Ich habe mit den Fähigkeiten der benutzerdefinierten Beitragstypen gespielt, und einige Verhaltensweisen bleiben für mich wirklich mystisch.

Die Einrichtung

Angenommen, Sie haben einen benutzerdefinierten Post-Typ (CPT) namens show zum Definieren einer Radiosendung mit folgenden functionen:

'capabilities' => array( // meta caps 'read_post' => 'read_show', 'edit_post' => 'edit_show', 'delete_post' => 'delete_show', // primitive/meta caps 'create_posts' => 'create_shows', // primitive caps used outside of map_meta_cap() 'publish_posts' => 'publish_shows', 'read_private_posts' => 'read_private_shows', 'edit_posts' => 'edit_shows', 'edit_others_posts' => 'edit_others_shows', // primitive caps used inside of map_meta_cap() 'read' => 'read_shows', 'edit_private_posts' => 'edit_private_shows', 'edit_published_posts' => 'edit_published_shows', 'delete_posts' => 'delete_shows', 'delete_private_posts' => 'delete_private_shows', 'delete_published_posts' => 'delete_published_shows', 'delete_others_posts' => 'delete_others_shows' ) 

Fügen Sie einen weiteren CPT namens Podcast hinzu, der über einen Meta-Wert mit einer Radiosendung verbunden ist (egal, hier ist es nicht wichtig). Es hat diese Fähigkeiten:

 'capabilities' => array( // meta caps 'read_post' => 'read_podcast', 'edit_post' => 'edit_podcast', 'delete_post' => 'delete_podcast', // primitive/meta caps 'create_posts' => 'create_podcasts', // primitive caps used outside of map_meta_cap() 'publish_posts' => 'publish_podcasts', 'read_private_posts' => 'read_private_podcasts', 'edit_posts' => 'edit_podcasts', 'edit_others_posts' => 'edit_others_podcasts', // primitive caps used inside of map_meta_cap() 'read' => 'read_podcasts', 'edit_private_posts' => 'edit_private_podcasts', 'edit_published_posts' => 'edit_published_podcasts', 'delete_posts' => 'delete_podcasts', 'delete_private_posts' => 'delete_private_podcasts', 'delete_published_posts' => 'delete_published_podcasts', 'delete_others_posts' => 'delete_others_podcasts' ) 

Angenommen, Sie fügen eine neue Rolle mit dem Namen Show Runner hinzu, die folgende Rechte haben sollte:

  • Eigene Radiosendung bearbeiten (keine Erstellung oder Löschung, die Radiosendung wird von einem Redakteur erstellt, der den Autor zum Showrunner ändert).
  • Erstelle / bearbeite seine Podcasts (aber nicht veröffentlichen oder löschen)

Hier ist das Rollen-functions-Mapping:

 add_role( 'show_runner', __( 'Show Runner', 'lang_plugin' ), array( 'read' => true, /* Media upload */ 'upload_files' => true, /* CPT show */ 'read_shows' => true, 'create_shows' => false, 'publish_shows' => false, 'edit_shows' => true, 'edit_published_shows' => true, 'delete_shows' => false, /* CPT podcast */ 'read_podcasts' => true, 'create_podcasts' => true, 'publish_podcasts' => false, 'edit_podcasts' => true, 'edit_published_podcasts' => true, 'delete_podcasts' => false, ) ); 

Das erste komische Ding

Ein Show-Runner kann nicht auf die Liste der Shows zugreifen, obwohl er “read_shows” und “edit_shows” auf “true” gesetzt hat und ich das “Show” -Menü in der Seitenleiste sehen kann.

Aber wenn ich create_shows auf true setze, greift er auf die Liste zu … und kann eine Show erstellen (aber das will ich nicht!).

Das zweite seltsame Ding (kommt von dem ersten)

Ich habe ‘create_shows’ erneut auf false gesetzt (um wiederzugeben, was ich wirklich will), bevor ich fortfahre.

Wenn ich die show_in_menu- Parameter des Podcast- CPT ändere , um es in das Show- Menü (als Untermenü) zu setzen:

 'show_in_menu' => 'edit.php?post_type=show' 

… dann hat der Show-Läufer Zugriff auf die Show-Liste, ohne den Button “Neue Show”. Cool ! Das ist, was ich will.

ABER : Wenn der Show Runner versucht, einen neuen Podcast zu erstellen (er kann dies in Bezug auf Fähigkeiten tun), sagt WordPress, dass er keine Rechte dafür hat …

Schlussfolgerung / Frage

Warum hängt eine CPT-Erstellung von der Menüposition ab? Es ist so, als ob der Podcast CPT sich den falschen Wert von create_shows vorstellt, obwohl es für ihn wahr ist .

Teilfrage: Wie kann eine Rolle auf die Liste eines CPT zugreifen, ohne ‘create_xxxxx’ auf ‘wahr’ zu setzen?

Solutions Collecting From Web of "Seltsame Fähigkeiten / Rollenverhalten"