user_has_cap filter erlaubt edit, erlaubt aber nicht speichern

Problem

Ich arbeite an einer Website, wo wir in der Lage sein müssen, einen Benutzernamen in das benutzerdefinierte Feld eines benutzerdefinierten Beitragstyps zu setzen und dem angegebenen Benutzer zu erlauben, Änderungen an diesem Beitrag und nur an diesem Beitrag vorzunehmen. Ich dachte, user_has_cap wäre der zu verwendende Filter-Hook, aber seltsamerweise scheint es einem Benutzer nicht zu erlauben, den Post zu aktualisieren.

Der Benutzer kann den Bearbeitungsbildschirm für den Post und nur den Post sehen, der meinen Filter korrekt funktioniert, aber das Klicken auf Update gibt den Fehler an. You are not allowed to edit posts as this user. was dem widerspricht.

Der Post-Typ hat capability_type => post also denke ich, dass das nicht das Problem sein sollte.

Code

 function event_cap_filter($all, $cap, $args) { // if not requesting edit post then return caps if('edit_post' != $args[0]) return $all; // if user can already edit others posts then return caps if($all['edit_others_posts']) return $all; // if user is the post author then return caps $post = get_post($args[2]); if($args[1] == $post->post_author) return $all; // query to find user in custom field // and therefore if they are allowed to edit this post if($can_edit) { foreach($cap as $c) { $all[$c] = true; } } return $all; } add_filter('user_has_cap', 'event_cap_filter', 10, 3); 

Frage

Wenn mein Benutzer den Post, in dem er angegeben ist, in dem benutzerdefinierten Feld bearbeiten kann, nach dem ich suche, warum kann er seine Änderungen nicht speichern? Übersehe ich etwas?

Solutions Collecting From Web of "user_has_cap filter erlaubt edit, erlaubt aber nicht speichern"

Ich habe mit dem gleichen Problem gekämpft … wenn args [0] veröffentlicht wird, wird args [2] nicht aufgefüllt. Sie müssen es von der URL abrufen.

 if(substr($args[0],0,7)=="publish"){ $postid=$_GET["post"]; if(!isset($postid))return $allcaps; } else $postid=$args[2]; 

Ich denke, dass Sie in _wp_translate_postdata() einen Fehler finden, der _wp_translate_postdata() edit_others_posts ohne Kontext für map_meta_cap und andere Filter zu map_meta_cap , die in Situationen wie map_meta_cap verwendet werden (wo ein Benutzer bestimmte Beiträge bearbeiten darf, die nicht zu ihnen gehören) :

https://core.trac.wordpress.org/ticket/30452#comment:5

Es hat nämlich den Effekt, dass der betroffene Benutzer sich im Post-Editor anmelden kann (was impliziert, dass es funktioniert), aber Versuche, Änderungen zu speichern, werden komplett fehlschlagen (was wie Ihr Problem klingt).

Das Ticket enthält eine Lösung von Daniel Bachuber, die andere wahrscheinlich für ihre eigenen Zwecke konvertieren können.

Hoffentlich ist der Fehler bald behoben.