ACF für Benutzer-Profil und -Einstellungen im Intranet nutzen

Dies ist ein Beitrag aus der Serie Intranet mit WordPress, in der ich beschreibe, wie ein Intranet-System mit WordPress aufgebaut werden kann, das mehr als ein Blog ist. Hier findet ihr den Ankündigungs-Beitrag. Hier findet ihr die Übersicht aller Beiträge der Serie.


Die Systematik, um Intranet-Benutzern ein eigenes Profil und Benutzer-abhängige Einstellungen zuzuweisen, basiert auf zwei Teilen: den ACF-Feldern, die die Optionen enthalten und dem Seiten-Template, das die Optionen anzeigt.

Benutzereinstellungen über Advanced Custom Fields: die Felder

Der nachfolgende Code ist gekürzt, um hier etwas übersichtlicher dargestellt zu sein. Am besten generiert ihr euch die benötigten Felder einfach über die ACF-Oberfläche.

acf_add_local_field_group(array(
	'key' => 'group_5d4abae61a945',
	'title' => 'Benutzereinstellungen',
	'fields' => array(
		array(
			'key' => 'field_5d4abaec75b05',
			'label' => 'Profilbild',
			'name' => 'profile_picture',
			'type' => 'image',
			[...]
		),
		array(
			'key' => 'field_5d598c475debe',
			'label' => 'Name',
			'name' => 'name',
			'type' => 'text',
			[...]
			),
		array(
			'key' => 'field_5d4c2aaec5495',
			'label' => 'Telefon',
			'name' => 'phone',
			'type' => 'text',
			[...]
		),
		array(
			'key' => 'field_5d6fb8461b9f9',
			'label' => 'Geburstdatum',
			'name' => 'birthday',
			'type' => 'date_picker',
			[...]
		),
		array(
			'key' => 'field_5d9c9de058a83',
			'label' => 'Täglicher Newsletter',
			'name' => 'daily_digest',
			'type' => 'true_false',
			[...]
		),
	),
	'location' => array(
		array(
			array(
				'param' => 'user_form',
				'operator' => '==',
				'value' => 'all',
			),
		),
	),
	[...]
));

Wichtig ist hier vor allem die location Definition, über die festgelegt wird, dass diese Optionen für Benutzer gelten. Prinzipiell können natürlich sämtliche verfügbare ACF-Felder genutzt werden, dies sind nur Beispiele.

In meinem Intranet-Projekt wurde über die Benutzereinstellungen auch die Option implementiert, ein tägliches News Mailing, das die letzten Beiträge und Geburtstage enthält, zu aktivieren oder deaktivieren (siehe letzte Option im Code). In einem Cron-Job können so alle Benutzer abgerufen werden, bei denen diese Option aktiviert ist, und deren Mail-Adresse als Empfänger genutzt werden.

ACF-Benutzereinstellungen: das Template

Das Template, um die Einstellungen anzuzeigen, ist recht simpel:

<?php
/**
 * Template Name: Einstellungen
 */
?>

<?php acf_form_head(); ?>
<?php get_header(); ?>
<?php the_post(); ?>

		<main>

			<article>

			<?php
			acf_form(
				array(
					'post_id' => 'user_' . get_current_user_id(),
					'field_groups' => array( 'group_5d4abae61a945' ),
					'return' => get_the_permalink() . '&action=edit&updated=true',
					'submit_value' => 'Einstellungen speichern',
				)
			);
			?>
			</article>

		</main>

<?php get_footer(); ?>

Wichtig ist hier vor allem, den Wert user_<id> als post_id zu übergeben, damit die Einstellungen dem entsprechenden Benutzer zugeordnet werden können. Soll jeder Benutzer nur seine eigenen Einstellungen verwalten können, erreicht man das mit "user_" . get_current_user_id().

Zu Beginn muss natürlich außerdem die Funktion acf_form_head() aufgerufen werden. Hiermit werden benötigte Scripte von ACF geladen, die das Frontend-Form erst funktional machen.

Benutzer-Einstellungen im Frontend mit ACF: So sieht es aus

Im Grunde sind mit diesen beiden Schritten bereits alle nötigen Einstellungen getätigt, um ein Benutzer-abhängiges Formular für Einstellungen und Co. im Frontend zu realisieren. Folgendermaßen sieht das dann (natürlich abhängig von CSS-Styles) im Frontend aus:

Auch im Backend werden die eigenen Felder zu den Benutzereinstellungen hinzugefügt. Jeder Benutzer kann seine persönlichen Daten du Einstellungen dann unter Benutzer > Dein Profil anzeigen, ändern und speichern:

Im Grunde ist dies schon das gesamte Geheimnis hinter Benutzereinstellungen bzw. Benutzer-abhängigen ACF-Feldern, die auch über das Frontend verwaltet werden können. Habt ihr Fragen? Dann lasst einen Kommentar da 🙂

Einen Kommentar hinterlassen