Guten Abend Ihr Lieben,
ich bin so langsam der Verzweiflung nahe und hoffe einer von Euch kann mir helfen. Ich habe bereits verschiedene Foren und diverse Tutorials gelesen (Justin Tadlocks, Frank Bueltges, etc.) aber irgendwie macht es glaube ich noch nicht richtig "Klick". Also was ich vorhabe ist das folgende:
Ich habe einen CPT namens "mobamember". Ich möchte nun eigentlich "nur" das ich User über ein Custom Field, das die ID eines Users trägt, von eben diesem User editiert und aktualisiert werden kann.
Hier der wichtige Auszug aus dem Code des CPT:
...
'capability_type' => array('mobamember', 'mobamembers'),
'capabilities' => array(
'publish_posts' => 'publish_mobamembers',
'edit_posts' => 'edit_mobamembers',
'edit_others_posts' => 'edit_others_mobamembers',
'delete_posts' => 'delete_mobamembers',
'delete_others_posts => 'delete_others_mobamembers',
'read_private_posts' => 'read_private_mobamembers',
'create_posts' => 'create_mobamembers',
'read_posts' => 'read_mobamembers',
'edit_post' => 'edit_mobamember',
'delete_post' => 'delete_mobamember',
'read_post' => 'read_mobamember',
),
...
Alles anzeigen
Ich habe mir dazu bereits eine neue Rolle als Klon des Contributors erstellt.
function cloneRole(){
global $wp_roles;
if ( ! isset( $wp_roles ) )
{
$wp_roles = new WP_Roles();
}
// Neue Rolle als Klon des Contributor erzeugen
$role = $wp_roles->get_role( 'contributor' );
$wp_roles->add_role('manager', 'Verwalter', $role->capabilities);
// Rolle Rechte zuweisen
$new_role = $wp_roles->get_role('manager');
$new_role->remove_cap('create_mobamembers'); // Verbietet das erstellen
$new_role->add_cap('edit_mobamembers'); // Erlaubt das Editieren meiner}
Alles anzeigen
Und zuletzt noch ein Auszug aus dem "add_meta_cap"-Hook:
function map_moba_meta_cap( $caps, $cap, $user_id, $args ) {
if ( 'edit_mobamember' == $cap || 'delete_mobamember' == $cap || 'read_mobamember' == $cap )
{
$post = get_post( $args[0] );
$post_type = get_post_type_object( $post->post_type );
$caps = array();
}
if ( 'edit_mobamember' == $cap )
{
$manager_id = get_post_meta( $post->ID, 'manager' , true );
if ( ( $user_id == $post->post_author ) )
{
$caps[] = $post_type->cap->edit_posts;
}
elseif ( $user_id == $manager_id )
{
$caps[] = $post_type->cap->edit_posts;
}
else
{
$caps[] = $post_type->cap->edit_others_posts;
}
}
...
}
Alles anzeigen
Das Problem ist nun: Ich kann die entsprechenden Posts editieren. Aber sobald ich Sie aktualisieren möchte, bekomme ich die Nachricht, dass ich dazu kein Recht habe. Auch merkwürdig ist: Über Quickedit geht es aber es macht den Verwalter gleichzeitig zum Autoren und das will ich nicht!
Kann ich vielleicht über den "save_post"-Hook umgehen? Bin ich auf dem richtigen Weg? Nochmal mein Ziel:
Ich möchte einen eigenen CPT namens "mobamember" haben. Ich als Admin bleibe Autor, egal was passiert. Ich lege über ein Feld einen oder mehrere Verwalter fest (ID) und schalte die entsprechenden "mobamembers" für diese Verwalter frei. Die sollen die dann editieren und speichern können ohne aber Autor zu werden.
Ich möchte in einem späteren Schritt dann einen neuen post_status einführen der "Änderungswunsch heisst. Hintergrund ist, dass diese Verwalter die "mobamembers" zwar bearbeiten und speichern können sollen. Diese Änderungen müssen aber erst vom Admin freigeschaltet werden.
Bitte helft mir, ich weiss nicht wo meine Wissenslücken sind und komme seit ca. drei Tagen nicht mehr vorwärts :/ Danke euch im Voraus!
Toby