Standardmäßig beschränkt WordPress den Zugriff auf die Seite, die die Datenschutzerklärung beinhaltet und unter Einstellungen > Datenschutz > Seite für die Datenschutzerklärung angegeben wurde. Nur Benutzer, die Einstellungen ändern dürfen (Berechtigungsname: manage_options) dürfen den Seiteninhalt ändern.

Wenn du möchtest, dass auch Benutzer mit anderen Berechtigungen diese Seite bearbeiten dürfen, musst du die Berechtigungen anpassen. Dafür gibt es eine eigene Berechtigung namens manage_privacy_options, die auf manage_options verweist (oder auf manage_network in Multisite-Installationen).

Hier ist eine Funktion, die das ändert:

/**
 * Allow editing the privacy policy page for everyone.
 * 
 * @see		https://wordpress.stackexchange.com/a/325784/137048
 * 
 * @param	array	$caps All capabilities
 * @param	string	$cap Capability
 * @return	string[]	List of available capabilities
 */
function allow_editing_privacy_policy( array $caps, string $cap ): array {
	if ( $cap !== 'manage_privacy_options' ) {
		return $caps;
	}
	
	$cap_name = is_multisite() ? 'manage_network' : 'manage_options';
	
	return array_diff( $caps, [ $cap_name ] );
}

add_filter( 'map_meta_cap', 'allow_editing_privacy_policy', 1, 2 );
Code-Sprache: PHP (php)

In diesem Fall wird die erforderliche Berechtigung komplett entfernt, was bedeutet, dass jeder die Seite der Datenschutzerklärung bearbeiten darf, der generell Seiten bearbeiten darf. Du kannst stattdessen auch eine andere Berechtigung hinzufügen, die der Benutzer haben muss, um den Zugriff auf diese Seite zu beschränken:

/**
 * Allow editing the privacy policy page for everyone having the capability to edit theme options.
 * 
 * @see		https://wordpress.stackexchange.com/a/325784/137048
 * 
 * @param	array	$caps All capabilities
 * @param	string	$cap Capability
 * @return	string[]	List of available capabilities
 */
function allow_editing_privacy_policy( array $caps, string $cap ): array {
	if ( $cap !== 'manage_privacy_options' ) {
		return $caps;
	}
	
	$cap_name = is_multisite() ? 'manage_network' : 'manage_options';
	
	$caps = array_diff( $caps, [ $cap_name ] );
	$caps[] = 'edit_theme_options';
	
	return $caps;
}

add_filter( 'map_meta_cap', 'allow_editing_privacy_policy', 1, 2 );
Code-Sprache: PHP (php)

In diesem Fall habe ich die Berechtigung edit_theme_options hinzugefügt, sodass nur Benutzer, die auch die Berechtigung haben, Theme-Einstellungen zu ändern, die Seite der Datenschutzerklärung ändern dürfen.

3 Kommentare

  1. Das ist – aus meiner Sicht als Datenschützer – eine großartige … Schnapsidee! Ich sehe, wo die Intention herkommt, zeigt aber lediglich die Defizite im derzeiten Rollenmodell von WordPress auf. Redakteure können zwar Seiten Content erschaffen, diesen aber nicht in ein Menü einpflegen, weil dazu Admin-Rechte erforderlich sind. Ebenso fehlt ganz offensichtlich eine Rolle für den hausinternen/externen Datenschutzbeauftragten, der diese Inhalte exklusiv bearbeiten darf. Sprich: es braucht eher andere Rollen und diesen zugewiesen Rechte als lediglich die oben beschriebene Anpassung von Berechtigungen alleine.

    1. Ich sehe das tatsächlich etwas differenzierter und nicht so Schwarz-Weiß.

      Beispielsweise folgendes Szenario:
      Der Kunde der Website, dem selbige auch gehört, ist lediglich für den Inhalt zuständig. Daher hat er keine Administrationsrechte. Weil es einfacher ist und weniger Supportaufwand bedeutet, wenn er nicht alles ändern kann. Dennoch möchte er selbst in der Lage sein, die Datenschutzerklärung zu ändern, weil er direkten Draht zu seinem Datenschutzbeauftragten hat, ich als Ersteller und Administrator der Website aber nicht.

      Natürlich lässt sich das auch über eine eigene Rolle lösen, aber das ist dann doch schon mehr Aufwand (gerade auch, wenn man das skalieren möchte). Und wenn man weiß, dass nur der Kunde selbst dort Zugriff hat und Dinge, für die er selbst rechtlich verantwortlich ist, auch ändern kann, sehe ich keinen nachhaltigen Grund, warum er das nicht tun sollte. Natürlich mit entsprechender Anleitung im Voraus.

      Aber wo siehst du da ein Problem mit dem Rollenmodell? Du kannst jederzeit eine neue Rolle anlegen, dieser sogar eine eigene dedizierte Berechtigung geben und dann immer noch den Code aus meinem Artikel verwenden, um genau diese Berechtigung abzufragen. Und schon ist es nicht mehr so eine Schnapsidee, oder? 🙂

      Ebenso ist mein „jedem erlauben“ natürlich auch überspitzt. Denn wie du in meinem zweiten Code und Text lesen kannst, erlaube ich dort nicht jedem, die Datenschutzerklärung zu bearbeiten. Das ist genau das, was du selbst mit einer eigenen Rolle bearbeiten kannst. Ich spare mir lediglich diesen Teil, weil ich in meinem Szenario (siehe oben) sicherstellen kann, dass nur diejenigen überhaupt Zugriff auf das WordPress-Backend haben, die dort auch entsprechende Inhalte bearbeiten dürfen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert