✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Erstellen Sie programmgesteuert Inhalte aus Gravity Forms-Einträgen

86

Dieser Beitrag zeigt Ihnen, wie Sie beliebige Inhalte (Benutzer, Beiträge oder etwas anderes Benutzerdefiniertes) basierend auf Einträgen in einem Gravity Forms-Formular erstellen. Wir werden einen Bereich im Bildschirm mit den Eintragsdetails im Adminbereich hinzufügen, um Inhalte basierend auf den übermittelten Informationen zu erstellen.

Was wir machen werden

Wir werden eine neue Metabox im Bildschirm mit den Eingabedetails von Gravity Form erstellen. In dieser Metabox fügen wir eine Schaltfläche hinzu. Die Idee ist, dass der Endbenutzer den Eintrag überprüfen kann und, wenn er die Eintragsdetails genehmigt, die Schaltfläche drücken kann, um die Inhaltserstellung auszulösen.

Erstellen Sie programmgesteuert Inhalte aus Gravity Forms-Einträgen

Unser Code wird beim Klicken auf diese Schaltfläche ausgelöst, führt die erforderliche Aktion aus, und wir zeigen dem Endbenutzer optional eine Nachricht über das Ergebnis an. Wir fügen dem Eintrag (optional) auch Metadaten hinzu, damit wir leicht überprüfen können, ob aus diesem Eintrag bereits Inhalte erstellt wurden oder nicht.

Ich werde den Code ziemlich einfach und allgemein halten, damit Sie ihn leicht ersetzen und an die Anforderungen Ihres Projekts anpassen können. Im folgenden Beispiel gehe ich davon aus, dass wir einen Benutzer programmgesteuert erstellen möchten. Aber was Sie mit den Zugangsdaten machen, liegt ganz bei Ihnen; Sie können einen Beitrag erstellen, andere Inhalte aktualisieren oder eine benutzerdefinierte E-Mail senden, wenn Sie möchten.

Identifizierung der Felder

Die erste Überlegung, die wir anstellen müssen, ist, wie wir die Felder identifizieren können. Mit anderen Worten, wir müssen wissen, welches Feld was ist. Denken Sie daran, dass sich die Werte eines Eintrags in Gravity Forms auf ihre Formularfeld-IDs beziehen. Und selbst mit Zugriff auf alle Formularfeldinformationen – wir brauchen einen sicheren Weg, um zu wissen, welche Felder welche Informationen enthalten. Ein Formular kann aus vier Texteingaben bestehen – wir müssen wissen, welche der vier Texteingaben für den Vornamen sind.

Sie haben hier einige Alternativen. Sie können die Feld-IDs fest codieren (z. B. festlegen, dass Feld-ID 2 der Nachname ist), dies ist jedoch sehr fehleranfällig und nicht empfehlenswert. Eine einfache Möglichkeit besteht darin, eine der vorhandenen Feldinformationen in Gravity Forms zu verwenden, z. B. CSS-Klassenname. Denken Sie jedoch daran, dass der Endbenutzer mehrere Klassennamen angeben kann, um das gewünschte Styling zu erhalten, und dass Ihr Code leicht beschädigt werden kann, wenn Sie diese Zeichenfolge nicht richtig analysieren. Ich empfehle auf jeden Fall, Ihre eigenen benutzerdefinierten Eingaben zu Feldern hinzuzufügen:

Wenn Sie eine solide Methode zum Identifizieren von Feldern für Ihren Code suchen, lesen Sie auf jeden Fall wie im obigen Beitrag. Aber um es in diesem Beitrag einfach zu halten, werde ich die CSS-Klasse verwenden und davon ausgehen, dass der Benutzer nichts anderes als die Werte eingibt, die wir in diesem Bereich benötigen.

Einrichten des Formulars

Der erste Schritt besteht natürlich darin, das Formular mit den Feldern und Feldtypen einzurichten, die Sie benötigen. Und dann fügen Sie die Feldbezeichner an den richtigen Stellen ein. Als Beispiel habe ich dieses Formular:

Erstellen Sie programmgesteuert Inhalte aus Gravity Forms-Einträgen

Und für jedes Feld, das ich einschließen möchte, stelle ich eine benutzerdefinierte CSS-Klasse bereit, die ich in meinem Code ansprechen kann. Zum Beispiel für Vorname;

Erstellen Sie programmgesteuert Inhalte aus Gravity Forms-Einträgen

Kommen wir nun zum Code und zur Erstellung einer Funktion, die Übermittlungen in benutzerdefinierten Inhalt umwandelt.

Hinzufügen einer Metabox in den Eintragsdetails

Der erste Schritt besteht darin, eine Art Aktionsauslöser hinzuzufügen, um unsere benutzerdefinierten Inhalte zu erstellen. Ein natürlicher Ort befindet sich im Bildschirm mit den Eintragsdetails. Auf diese Weise kann der Endbenutzer die übermittelten Werte überprüfen und dann entscheiden, ob er daraus Inhalte erstellen möchte oder nicht. Mit Gravity Forms können Entwickler in diesen Bildschirmen ganz einfach benutzerdefinierte Metaboxen erstellen.

Um eine benutzerdefinierte Metabox zum Eintragen von Details zu erstellen, können wir den Filter verwenden gform_entry_detail_meta_boxes. Es ist ein Filter, der ein Array aller Metaboxen zurückgibt, die in den Eintragsdetails angezeigt werden sollen. Wir fügen einfach ein neues Array-Element hinzu, um eine neue Metabox zu erstellen, und definieren eine Callback-Funktion, um ihren Inhalt zu rendern. Wir setzen einen schönen beschreibenden Titel in „ title” und definieren seine Position so, dass er in „ side” erscheint.

Und dann müssen wir die Callback-Funktion definieren: awp_gf_create_user_metabox_render()in unserem Code. Diese Funktion ist für das Rendern des Inhalts der Metabox verantwortlich. Als Parameter für diese Funktion erhalten wir ein Array von Argumenten, in dem wir das Formular- und Eintragsobjekt abrufen können;

function awp_gf_create_user_metabox_render($args) { $form = $args['form']; // Form array. Here we find all the fields in $form['fields'] $entry = $args['entry']; // Entry array. Here we find all values in this current submission $render = ''; echo $render; }

Alles, was wir in dieser Funktion tun müssen, ist, etwas HTML aufzubauen und es wiederzugeben.

Was das Hinzufügen einer Schaltfläche zum Auslösen einer Aktion betrifft, folgen wir der gleichen Methode wie Gravity Forms selbst. Es gibt ein Formularelement, das den gesamten Bildschirm mit den Eintragsdetails umschließt, und alles, was wir tun müssen, ist ein Onclick-Ereignis auf einer Senden-Schaltfläche hinzuzufügen, das die actionEigenschaft „ ” ändert. Wir definieren unseren eigenen benutzerdefinierten Aktionsnamen, damit wir wissen, wann er ausgelöst wurde – und er steht nicht im Konflikt mit den Aktionen von Gravity Forms.

Nennen wir unsere benutzerdefinierte Aktion „ awp_gf_create_user” und rendern eine Senden-Schaltfläche mit einem Onclick-Ereignis wie folgt:

Mit dem obigen Code erhalten wir eine neue Metabox auf der Seite im Bildschirm mit den Eintragsdetails, die so aussieht:

Erstellen Sie programmgesteuert Inhalte aus Gravity Forms-Einträgen

Im Moment passiert nichts, wenn Sie auf die Schaltfläche klicken. Das liegt nur daran, dass wir noch keinen Code geschrieben haben, um darauf zu hören.

Extrahieren von Werten aus dem Eintrag

Wie bereits erwähnt, werden alle übermittelten Werte im Eintragsarray durch ihre Feld-IDs identifiziert.

Erstellen Sie programmgesteuert Inhalte aus Gravity Forms-Einträgen

Im obigen Bild steht das Feld ID 1 für den Vornamen, ID 2 für den Nachnamen und so weiter. Aber Moment mal – was passiert mit 5.1, 5.3 und so weiter? In Gravity Forms erhalten wir „Unter-IDs” für spezielle Felder, die mehrere Werte akzeptieren. Ich habe meinem Formular ein Adressfeld hinzugefügt, das ein Feld, aber mehrere Eingaben ist. Jede Eingabe in diesem Feld erhält ihre eigene ID, die an die Haupt-ID angehängt wird und einen Punkt. Wenn Sie keines dieser Felder mit mehreren Eingaben verwenden, großartig! Der Code wird wirklich einfach. Aber ich habe dieses spezielle Feld eingefügt, damit wir sehen können, wie wir darauf zugreifen können.

Im Moment besteht unser Problem darin, dass der Code nicht weiß, wofür die Feld-ID 1, 2 oder 3 sind. Diese Informationen befinden sich im Formulararray, genauer gesagt im $form['fields']Element. Dieses Element enthält alle Felder im Formular, und wir haben vollen Zugriff auf jedes Feldobjekt. Hier finden wir unsere gewählte Identifikationsmethode; in meinem beispiel cssClass.

Wir können diese Felder einfach durchlaufen und nach den Identifikatoren suchen, die wir extrahieren möchten. Ich lege alle meine Bezeichner in ein Array und wir können einfach prüfen, ob ein Feld in der Schleife eines davon ist.

Aber zuerst müssen wir wissen, dass auf die Schaltfläche geklickt wurde. Das ist ziemlich einfach; Wir können einfach prüfen, ob sich unsere benutzerdefinierte Aktion im $_POSTArray befindet. Da wir aber mit Gravity Forms arbeiten, können wir [rgpost](https://docs.gravityforms.com/rgpost/)(). Die Gravity Forms-Funktion rgpost()gibt einfach den Wert einer POST-Anforderung zurück. Überprüfen rgpost('awp_gf_create_user')und $_POST['awp_gf_create_user']ist genau das gleiche. Aber wir werden die Funktion von Gravity Forms verwenden.

In Zeile #8definieren wir ein Array mit allen benutzerdefinierten Identifikatoren, nach denen wir suchen möchten. Das sind alle Werte, die ich als CSS-Klasse in mein Formular eingetragen habe. Dann prüfen wir in der Schleife für jedes Feld, ob das Feld einer dieser Identifikatoren ist. In meinem Beispiel verwende ich die CSS-Klasse, um Felder zu identifizieren, aber ich empfehle die Verwendung benutzerdefinierter Eingaben. Dieser Code funktioniert auch nicht, wenn mehrere CSS-Klassen angegeben wurden.

Dann #12fügen wir in Zeile unserem endgültigen Wertearray ein neues Element mit dem Bezeichner als Schlüssel hinzu. Wir verwenden dann die ID des Felds und verweisen auf das Eingabearray. Am Ende dieser Schleife $valuessollten alle relevanten übermittelten Werte ausgefüllt werden. Alle Felder, die leer gelassen oder nicht im Identifikator-Array enthalten sind, werden ausgeschlossen.

Wenn Sie ein spezielles Mehrfacheingabefeld hinzugefügt haben, müssen Sie zusätzlichen Code hinzufügen, um die Sub-IDs richtig zu referenzieren. Ich weiß, dass awp_addressdas ein Adressfeldtyp ist. Adressfeldtypen in Gravity Forms folgen einem festen Muster von Sub-IDs, und ich habe nur drei mögliche Eingaben aktiviert (Straßenadresse 1 hat Sub-ID 1, Postleitzahl hat Sub-ID 3 und Stadt hat Sub-ID 5). Um diese Art von Feldern zu handhaben, müssen wir so etwas tun:

In Zeile #4I verkette ich alle Werte, sodass der letzte String ein standardisiertes einzeiliges Adressformat ist („, “).

Wir haben jetzt alle notwendigen Werte schön sortiert nach Identifikatorschlüsseln im Array $values. Was Sie damit machen, liegt ganz bei Ihnen und den Bedürfnissen Ihres Projekts. Aber ich werde ein Beispiel für das Erstellen eines Benutzers in WordPress einfügen.

Erstellen eines neuen Benutzers aus der Eintragsübermittlung

Um meinen Code sauber zu halten, rufe ich eine separate Funktion auf, die für das Erstellen eines neuen Benutzers verantwortlich ist. Alles, was ich brauche, ist, das Werte-Array zu übergeben. Ich möchte, dass diese Funktion eine Art Hinweis auf das Ergebnis dieser Aktion zurückgibt. Auf diese Weise kann ich eine Nachricht erstellen, ob der Benutzer erfolgreich erstellt wurde oder ob bereits ein Benutzer mit der angegebenen E-Mail-Adresse existiert.

Dann definieren wir einfach die awp_gf_create_user()Funktion. Ich werde ein einfaches Beispiel für das programmgesteuerte Erstellen eines Benutzers in WordPress einfügen. Dies ist lediglich als Beispiel gedacht, um zu zeigen, wie die extrahierten Werte zu verwenden sind.

Zuerst prüfen wir, ob ein Benutzer mit der angegebenen E-Mail bei existiert [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Wenn nicht, verwenden wir [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)(), um einen Benutzer hinzuzufügen. Ich habe auch ein Beispiel für das Speichern von benutzerdefiniertem Benutzer-Meta (unser Adressfeld) eingefügt. Schließlich sollte unsere Methode das Ergebnis der Erstellung des Benutzers zurückgeben. Wenn der Benutzer bereits existierte, geben wir -1 zurück. Andernfalls geben wir die Benutzer-ID zurück.

Zurück in unserem Metabox-Render können wir jetzt basierend auf dem Ergebnis davon eine Nachricht an den Endbenutzer bedingt hinzufügen. Dies ist ein einfaches Beispiel; Wenn der zurückgegebene Wert -1 war, existiert bereits ein Benutzer mit der angegebenen E-Mail-Adresse. Und wenn der zurückgegebene Wert größer als 0 war, wissen wir, dass ein Benutzer erfolgreich erstellt wurde. Daher veranlassen wir eine Meldung, dass die Benutzererstellung erfolgreich war.

Vermeidung von Duplicate Content

Das obige einfache Beispiel deaktiviert das Erstellen mehrerer Benutzer aus demselben Eintrag, da es prüft, ob bereits ein Benutzer mit der angegebenen E-Mail-Adresse vorhanden ist. Aber in anderen Fällen haben Sie diese Möglichkeit möglicherweise nicht. Eine weitere Strategie, um zu vermeiden, dass Endbenutzer doppelte Inhalte aus demselben Eintrag erstellen, besteht darin, benutzerdefinierte Eintrags-Metadaten hinzuzufügen. Mit anderen Worten; Wenn die Aktion erfolgreich war, fügen wir diesem Eintrag ein benutzerdefiniertes Meta hinzu. Und dann prüfen wir einfach, ob dieses benutzerdefinierte Meta existiert, bevor wir die Aktion starten.

Gravity Forms bietet Methoden zum Hinzufügen von benutzerdefinierten Metadaten zu Einträgen; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()sowie Abrufen von Werten: [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

In Zeile #4holen wir unser benutzerdefiniertes Eintragsmeta. Wenn es existierte (nicht leer), setzen wir eine Nachricht, die den Endbenutzer darüber informiert, dass er oder sie bereits versucht hat, Inhalte aus diesem Eintrag zu erstellen. Wenn das benutzerdefinierte Meta nicht existierte, fahren wir mit der Erstellung unserer Inhalte fort. Wenn der Inhalt erfolgreich erstellt wurde, müssen wir das benutzerdefinierte Meta zum Eintrag hinzufügen (Zeile #10).

Fazit und endgültiger Code

In diesem Beitrag habe ich versucht, ein Beispiel zu geben, wie man Inhalte aus einem Eintrag in Gravity Forms erstellt. Die Codebeispiele sollen Ihnen eine Vorstellung davon vermitteln, wie Sie es an die Anforderungen Ihres Projekts anpassen und ändern können. Ich empfehle definitiv, diese Funktionalität zu erweitern, um Fehlermeldungen besser zu behandeln. Möglicherweise möchten Sie diese Metabox auch nur für bestimmte Formulare hinzufügen. Aber das sollte eine gute Basis sein, auf der man aufbauen kann.

Und hier ist der endgültige Code:

Aufnahmequelle: awhitepixel.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen