it-swarm.com.de

Wie kann ich dem Editor erlauben, nur Datenschutzseiten/-einstellungen zu bearbeiten?

In meiner WordPress-Installation (4.9.8.) darf die Editorrolle die Datenschutzseite nicht bearbeiten.

In meinem functions.php würde folgendes funktionieren:

$role_object = get_role( 'editor' );
$role_object->add_cap( 'manage_privacy_options', true );
$role_object->add_cap( 'manage_options' ); // this needs to be active in order that before cap works

Jetzt hat der Editor jedoch weit mehr Rechte als nur die Datenschutzseite zu bearbeiten.

Gibt es eine andere Möglichkeit, mit einigen Zeilen PHP Code zu grant access to the editor user role?


Als Workaround nutze ich dieses Plugin jetzt: https://wordpress.org/plugins/manage-privacy-options/

Eine andere Art der Problemumgehung besteht darin, in den Datenschutzeinstellungen keine Datenschutzseite auszuwählen.

2
André Kelling

Das Bearbeiten der Datenschutzrichtlinie ist auf manage_privacy_options beschränkt, wie in einem Kommentar in der WordPress-Kerndatei wp-includes/capabilities.php angegeben:

/*
 * Setting the privacy policy page requires `manage_privacy_options`,
 * so editing it should require that too.
 */
if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) {
  $caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) );
}

Damit Benutzer mit den Rollen editor und administrator (in Einzel- und Multisite-Instanzen) die Seite mit den Datenschutzrichtlinien bearbeiten und löschen können, muss das Array $caps überschrieben werden:

add_action('map_meta_cap', 'custom_manage_privacy_options', 1, 4);
function custom_manage_privacy_options($caps, $cap, $user_id, $args)
{
  if ('manage_privacy_options' === $cap) {
    $manage_name = is_multisite() ? 'manage_network' : 'manage_options';
    $caps = array_diff($caps, [ $manage_name ]);
  }
  return $caps;
}
1
Sven