Wie gehe ich mit dem Einreichen von Formularen um?

13

Ich bin neu in WordPress und stehe daher vor einigen Problemen.

Das Anwendungsszenario sieht wie folgt aus:

  1. Einem Benutzer wird ein Antragsformular für die Gründung eines Clubs in seiner Schule angezeigt.
  2. Der Benutzer füllt das Formular aus und klickt auf die Schaltfläche "Senden".
  3. Das Formular muss validiert werden.
  4. Wenn die Validierung erfolgreich ist, werden die Daten in einer benutzerdefinierten Tabelle club_detailsin db gespeichert und dem Benutzer wird eine Nachricht angezeigt (z. B .: Vielen Dank für die Übermittlung. Ihre Bewerbung wird an den Administrator zur Genehmigung gesendet.). Anderenfalls werden dem Benutzer entsprechende Fehlermeldungen angezeigt.
  5. Der Administrator wechselt zum Wordpress-Administratorfenster, um die ausstehenden Anforderungen für den Club zu genehmigen. (Die Daten werden von der Datenbank abgerufen und dem Administrator angezeigt.)

Ich habe folgendes gemacht:

  • für 1) Ich habe ein Bewerbungsformular / eine Bewerbungsseite mit dem Wordpress-HTML-Editor erstellt.
  • für 3) Ich habe eine Javascript-Datei ( validation.js), die den Validierungscode hat.
  • für 4) Ich habe eine PHP-Datei ( club-functions.php), die eine Funktion storeInDB()zum Speichern der Anwendungsdetails in einer benutzerdefinierten Tabelle in db hat.
  • für 5) Ich habe meinen eigenen Plugin-Ordner erstellt und eine PHP-Datei ( club.php) hinzugefügt , in der die Anwendungsdetails dem Administrator im Wordpress-Administratorfenster angezeigt werden.

Ich stecke an der folgenden Stelle fest: Wie gehe ich mit dem Einreichen des Formulars um? Wo soll ich den Code platzieren, der die Validierungsfunktion des Javascript aufruft und später die storeInDB()Funktion aufruft?

Bitte machen Sie mir einige Vorschläge, wie ich dies erreichen kann. Ist dieser Ansatz gut? Vielen Dank im Voraus.

Pooja
quelle

Antworten:

13

Sie sollten die wp_ajaxoder die wp_ajax_noprivFunktion verwenden.

Zunächst sollten Sie die Ajax-URL des Administrators als Aktionsattributwert in das Übermittlungsformular eingeben.

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

Auf diese Weise wird das Formular standardmäßig (ohne JavaScript) an die admin-ajax.php gesendet. Sie können JavaScript verwenden, damit es mit AJAX funktioniert.

Als nächstes folgt die Funktion, die die übermittelten Daten verwendet. Fügen Sie in das Formular eine wp_nonce_fieldund eine ausgeblendete Eingabe mit der Aktion name ein. Mein Aktionswert ist add_transfer.

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

Sie können die Funktion, die dieses Formular verarbeitet, in die functions.php oder in Ihre Plugin-Datei einfügen. Sie können wp_ajax_+ den Aktionsnamen verwenden, wenn dies ein Formular nur für angemeldete Benutzer ist. Verwenden Sie für nicht angemeldete Benutzer wp_ajax_noprivstattdessen + den Aktionsnamen.

add_action('wp_ajax_add_transfer', 'process_add_transfer');

function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
    echo 'You targeted the right function, but sorry, your nonce did not verify.';
    die();
} else {
    // do your function here 
    wp_redirect($redirect_url_for_non_ajax_request);
}
ifdion
quelle
Danke ifdion für die Antwort. Ich erstelle das Formular im 'Wordpress HTML Editor'. Also, ist es gut, PHP-Code in das Formular aufzunehmen, da ich das 'Exec-PHP'-Plugin installieren muss, was ich für einen Overkill halte? Bitte teilen Sie Ihre Gedanken.
Pooja,
Ersetzen Sie einfach den Aktionswert durch your-site-url.com/wp-admin/admin-ajax.php .
Ifdion
Funktioniert es?
Ifdion
1
Gibt es eine gute Möglichkeit, dies auch ohne admin-ajax.php zu erreichen?
Tahir Yasin
1
@TheWPNovice Ich denke, es ist immer noch im /wp-admin/Verzeichnis. Beachten Sie, dass Sie in dieser Datei nichts ändern oder hinzufügen müssen.
Ifdion
2

Lassen Sie mich zunächst sagen, dass die JavaScript-Überprüfung auf der Clientseite funktioniert. Wenn der Benutzer js deaktiviert, treten Probleme auf.

Daher sollten Sie auch die Eingabewerte serverseitig überprüfen.

In diesem Sinne:

Der js-Code kann direkt von der Seite aufgerufen werden, auf der sich das Formular befindet. Das onsubmit-Attribut ist die übliche Art, es aufzurufen.

Beispiel

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

page.php

Dies kann auch Ihre benutzerdefinierte Vorlagenseite oder single.php sein. In diesem Fall ist 99 die ID der bestimmten Seite, die Sie dem Benutzer anzeigen möchten, wenn sie genehmigt wurde oder einen Fehler aufwies.

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}
pcarvalho
quelle
Danke Peteroak für die Antwort. Wo kann ich PHP-Code aufrufen, um die Formulardaten weiter zu verarbeiten?
Pooja
Das Aktionsattribut zeigt auf eine Datei. In dieser Datei können Sie Ihr Formular filtern und validieren. Ich werde meine Antwort aktualisieren, um dies zu berücksichtigen.
pcarvalho