ACF für Benutzer-Profil und -Einstellungen im Intranet nutzen
Veröffentlicht am 27.01.2020
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 🙂
Kommentare (3)
Susa
Hallo Christoph,
das ist super. Eine Anfängerfrage: wohin genau kommen die Codes für die Felder und das Template jeweils?
Christoph
Hallo Susa, die gewünschten ACF-Felder generierst du am besten direkt über die ACF-Oberfläche. Wenn sie darüber angelegt werden, entfällt auch der Bedarf, das code-seitig zu erstellen. Das Template sollte als neue Datei im Theme-Ordner angelegt werden (Dateiname ist frei wählbar). Im Template muss dann die korrekte Feldgruppe aus ACF in field_groups hinterlegt werden.
Susa
Großartig, vielen lieben Dank für dein schnelles Feedback. Das bekomme ich auf jeden Fall hin!