Geben Sie vorübergehend die Fähigkeit “manage_options” ein

Um es Editoren zu ermöglichen, die Metadaten eines anderen Autors zu bearbeiten (update_user_attribute), muss ich ihnen die Option ‘manage_options’ geben, sonst bekomme ich eine ‘Cheatin’ huh ‘die Nachricht. Ich möchte ihnen nur diese Fähigkeit auf einer bestimmten Edit Author Meta-Seite geben.

Ich gebe ‘Editor’ die Erlaubnis, ‘list_users’ zu verwenden, um auf die Benutzer-Admin-Tabelle zuzugreifen. Ich gebe ‘Editor’ die Erlaubnis ‘manage_options’ beim Betreten der spezifischen Autoren Meta-Seite. (Ich habe versucht, oben auf die function save_profile_fields zu setzen, habe aber immer noch die Nachricht erhalten.)

Ich entferne die function ‘manage_options’ am Ende der function save_profile_fields. Dies funktioniert, aber wenn der Editor es versäumt, etwas auf der Autoren-Metaseite zu speichern, behält der Editor die Fähigkeit “manage_options” bei.

if( !current_user_can( 'manage_options' ) && current_user_can( 'edit_others_posts' ) ){ $edit_editor_role = get_role( 'editor' ); $edit_editor_role->add_cap( 'manage_options' ); } 

Wo würde man die Fähigkeit ‘manage_options’ aus der Editorrolle entfernen?

 $edit_editor_role = get_role( 'editor' ); $edit_editor_role->remove_cap( 'manage_options' ); 

Solutions Collecting From Web of "Geben Sie vorübergehend die Fähigkeit “manage_options” ein"

Gute Frage! Die Fähigkeitsprüfung wird wahrscheinlich ziemlich früh im Ladeprozess durchgeführt. /wp-admin/users.php Sie /wp-admin/users.php , können Sie feststellen, dass eines der ersten Dinge, die passieren können current_user_can( 'list_users' ) , so dass eines eindeutig benötigt wird, oder Sie erhalten das “Cheatin ‘uh?” Warnung. Aber vorher ist /wp-admin/admin.php enthalten, und am Ende dieser Datei wird WordPress eine individuelle Aktion für jede Seite aufrufen, load-users.php beim Laden von wp-admin/users.php .

Dies bedeutet, dass Sie in der Lage sein sollten, eine function zum Hinzufügen der functionen einzurichten, die zum Ausführen Ihrer Aufgaben beim Laden dieser Seite erforderlich sind (vorausgesetzt, der aktuelle Benutzer verfügt natürlich über ausreichende Berechtigungen). So etwas könnte funktionieren, wenn einem Benutzer neue functionen auf der Benutzerliste und den Benutzerbearbeitungsseiten zur Verfügung gestellt werden:

 function my_add_caps() { // add capabilities here } add_action('load-users.php', 'my_add_caps'); add_action('load-profile.php', 'my_add_caps'); // might be needed if you somehow cannot edit your own user add_action('load-user-edit.php', 'my_add_caps'); 

Ich würde mir nicht zu viele Gedanken darüber machen, die Fähigkeiten zu entfernen, sobald die Seite geladen ist, wird die hinzugefügte Fähigkeit ihren Teil ausgespielt haben. Beachten Sie jedoch, dass Sie möglicherweise die function für Admin-Seiten hinzufügen müssen, die für das Speichern von Optionen oder AJAX-Request-Handlern zuständig sind, abhängig davon, wie viele functionen bei der validation / Speicherung von Optionen von WordPress geprüft werden.