ACF Felder je nach Benutzerrolle als Pflichtfeld oder Optional definieren

Das WordPress Plugin Advanced Custom Fields bzw. Advanced Custom Fields Pro (ACF) ist eine große Hilfe wenn es darum geht, einfache oder komplexe Eingabemasken zu bauen. Ein wichtiges Detail ist dabei die Möglichkeit, Eingabefelder als Pflichtfelder zu definieren. So vermeidet man, dass bestimmte wichtige Angaben fehlen. Bei einem Custom Post Type (CPT) vom Typ Kalender könnte das zum Beispiel der Veranstaltungsort oder die Emailadresse des Veranstalters sein.

Andererseits können Pflichtfelder auch lästig sein. Manchmal möchte man, dass Nutzer einer bestimmten Rolle (zum Beispiel ‚Veranstalter‘) diese Felder zwar zwingend ausfüllen müssen, um einen neuen Eintrag speichern zu können – für andere Nutzerrollen (zum Beispiel ‚Redaktion‘) liegen diese Informationen aber vielleicht gar nicht vor.

Wie bekommt man es nun hin, dass solche EIngabefelder für bestimmte Rollen Pflichtfelder sind, für andere Rollen aber optional? Hier ist der Filter „prepare_field“ praktisch. Damit hängen wir uns sozusagen zwischen in den Prozess, der das Eingabefeld erzeugt.

Um eine eindeutige Zuordung eines bstimmten Eingabefeldes hinzubekommen addressieren wir den key des Feldes – hier im Beispiel das Feld ‚Veranstaltungsort‘ mit dem imaginären Schlüssel „field_123“.

// Veranstaltungsort *

add_filter('acf/prepare_field/key=field_602bbd380ae1b', 'custom_submission_required_fields1');
function custom_submission_required_fields1($field) {

$field['required'] = true;

$user = wp_get_current_user();

if (( in_array( 'redaktion', (array) $user->roles ) ) 
|| ( in_array( 'administrator', (array) $user->roles ) )) {

// if (is_admin()) {
$field['required'] = false;
}

return $field;
}

Im obigen Code-Schnipsel legen wir zunächst fest, dass das Feld ein Pflichtfeld – also ‚required‘ ist. In einem nächsten Schritt fragen wir über die Funktion wp_get_current_user die Nutzerrolle des aktuellen Nutzers ab. Falls der Nutzer nun der Rolle Redaktion oder Administrator angehört heben wir die Einstellung „Pfichtfeld“ wieder auf. Somit können Nutzerinnen und Nutzer der Rolle Redaktion sowie Administratoren der Seite neue Einträge vom Typ Veranstaltung anlegen, ohne das Feld ‚Veranstaltungsort‘ ausfüllen zu müssen. Alle anderen Nutzer (z.B. Veranstalter) können neue Einträge jedoch nur dann speichern (bzw. abschicken), wenn sie das Feld ‚Veranstaltungsort‘ ausgefüllt haben.

Damit die Weiche funktioniert muss das Feld in ACF als nicht-Pflichtfeld (nicht-required) definiert sein.

Natürlich funktioniert diese Pfichtfeld-Weiche auch bei Frontend-Formularen. Die Felder werden entsprechend der im Theme festgelegten Gestaltung als Pflichtfeld markiert (in der Regel mit dem kleinen roten Sternchen) und der Standard-Warnhinweis für Pflichtfelder erscheint auch erwartungsgemäß so, wie bei ganz normalen Pflichtfeldern üblich im Design des verwendeten Themes.