Das beliebte Plugin „Advanced Custom Fields“, kurz ACF, erlaubt es WordPress-Entwicklern und Admins das Backend komfortabel mit eigenen Feldern zu erweitern. Allerdings gibt es durchaus den Anwendungsfall, bestimmten Nutzergruppen, etwa Redakteuren, den Zugriff auf ausgewählte Felder zu sperren. Im nachfolgenden Beispiel zeige ich Ihnen, wie Sie Felder im WordPress-Backend auf „readonly“ setzen können.
Von Haus aus bringt Advanced Custom Fields keine Möglichkeit mit, Schreibrechte auf Felder an Benutzerrechte zu koppeln – auch nicht die Pro-Version des Plugins. Allerdings gibt es genügend Optionen, die wir uns für diesen Zweck zu Nutze machen können. Kurz mein (einfacher) Lösungsansatz erklärt: Wir setzen eine CSS-Klasse in den Feldoptionen namens „readonly“ und schleusen ein paar Zeilen Javascript in den Head-Bereich der WordPress-Administration, um das Feld anzusprechen und die Bearbeitung zu unterbinden.
Schritt 1: CSS-Klasse setzen
Wählen Sie das ACF-Feld aus, dessen Bearbeitung Sie begrenzen möchten. Sie können natürlich auch mehrere Felder für diesen Zweck wählen. Im Eingabefeld für die CSS-Klasse im Bereich „Wrapper Attributes“ setzen Sie nun den Wert readonly
.
Schritt 2: PHP-Funktion erstellen
Nun öffnen Sie die Datei functions.php
Ihres (Child-) Themes, um hier mittels einer Action, die Advanced Custom Fields uns anbietet, einen Code in den Head einzuschleusen. Dieser sieht wie folgt aus:
<?php /** * ACF: Insert custom JS in wp-admin */ function my_acf_admin_head() { ?> <script type="text/javascript"> jQuery(document).ready(function($) { // make fields with wrapper class .readonly read-only $('.acf-field.readonly .acf-input input').prop('readonly', true); }); </script> <?php } add_action('acf/input/admin_head', 'my_acf_admin_head'); ?>
Was passiert hier? Wir schauen einfach mittels jQuery, ob wir einen ACF-Container mit unserer CSS-Klasse aus Schritt 1 finden können und wenn ja, werden die Formularfelder um das Attribut „readonly“ erweitert. Dadurch wird die Bearbeitungsmöglichkeit unterbunden.
Schritt 3: Nutzergruppe abfragen
Der bisherige Stand funktioniert zwar, führt aber dazu, dass wir wirklich jedem Nutzer die Bearbeitungsoption des Feldes entziehen. Vermutlich möchten Sie als Admin aber weiterhin die „Hoheit“ besitzen, das bzw. die Custom Field(s) zu bearbeiten. Aus diesem Grunde müssen wir unseren PHP-Code um eine Abfrage der Benutzerrechte erweitern. Ich frage in der nachfolgenden Anpassung des Codes aus Schritt 2 speziell auf ein Recht ab, welches nur Admins haben, nämlich manage_options
:
<?php /** * ACF: Insert custom JS in wp-admin */ function my_acf_admin_head() { if ( ! current_user_can( 'manage_options' ) ) : ?> <script type="text/javascript"> jQuery(document).ready(function($) { // make fields with wrapper class .readonly read-only $('.acf-field.readonly .acf-input input').prop('readonly', true); }); </script> <?php endif; } add_action('acf/input/admin_head', 'my_acf_admin_head'); ?>
Natürlich können Sie die if-Abfrage beliebig anpassen. Wenn nun alles korrekt übernommen wurde, werden zukünftig alle Felder, denen Sie die CSS-Klasse readonly
verpasst haben, allen Usern unterhalb des Admins keine Bearbeitungsmöglichkeit mehr erteilen.