Come gestire l'invio dei moduli?


13

Sono nuovo di WordPress e quindi di fronte ad alcuni problemi.

Lo scenario del caso d'uso è il seguente:

  1. A un utente viene visualizzato un modulo di domanda per avviare un club nella sua scuola.
  2. L'utente compila il modulo e preme il pulsante "Invia".
  3. Il modulo deve essere convalidato.
  4. Se la convalida ha esito positivo, i dati vengono archiviati nella tabella personalizzata club_detailsin db e all'utente viene mostrato un messaggio (ad esempio: Grazie per l'invio. L'applicazione viene inviata all'amministratore per l'approvazione.) Altrimenti vengono mostrati all'utente messaggi di errore appropriati.
  5. L'amministratore va al pannello di amministrazione di Wordpress per approvare le richieste in sospeso per il club. (I dati vengono recuperati da db e mostrati all'amministratore).

Ho fatto quanto segue:

  • per 1) Ho creato un modulo di domanda / pagina utilizzando l'editor HTML di Wordpress.
  • per 3) Ho un file javascript ( validation.js) che ha il codice di convalida.
  • per 4) Ho un file php ( club-functions.php) che ha una funzione storeInDB()per memorizzare i dettagli dell'applicazione nella tabella personalizzata in db.
  • per 5) Ho creato la mia cartella plugin e ho aggiunto un file php ( club.php) che mostra i dettagli dell'applicazione all'amministratore nel pannello di amministrazione di Wordpress.

Sono bloccato nel seguente posto: Come gestire l'invio del modulo. Dove devo posizionare il codice che chiama la funzione validata di javascript e in seguito chiama la storeInDB()funzione.

Vi prego di fornirmi alcuni suggerimenti su come posso raggiungere questo obiettivo e questo approccio è buono? Grazie mille in anticipo.

Risposte:


13

È necessario utilizzare wp_ajaxla wp_ajax_noprivfunzione o .

Prima di tutto dovresti inserire l'URL ajax dell'amministratore come valore dell'attributo dell'azione nel modulo di invio.

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

In questo modo il modulo verrà inviato di default a admin-ajax.php (senza JavaScript). Puoi usare JavaScript per farlo funzionare usando AJAX.

La prossima è la funzione che utilizzerà i dati inviati. All'interno del modulo, inserisci un wp_nonce_fielde un input nascosto con l'azione name. Il mio valore d'azione è add_transfer.

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

Puoi inserire la funzione che gestirà questo modulo nel function.php o nel tuo file plugin. Puoi usare wp_ajax_+ il nome dell'azione se questo è un modulo solo per gli utenti che hanno effettuato l'accesso. Per gli utenti che non hanno effettuato l'accesso, utilizzare invece wp_ajax_nopriv+ il nome dell'azione.

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);
}

Grazie ifdion per la risposta. Sto creando il modulo in "Editor HTML Wordpress". Quindi, è bene includere il codice php nel modulo in quanto dovrò installare il plugin 'Exec-PHP' che credo sia eccessivo? Per favore, condividi i tuoi pensieri.
Pooja,

Sostituisci semplicemente il valore dell'azione con your-site-url.com/wp-admin/admin-ajax.php .
ifdion,

Funziona?
ifdion,

1
c'è un buon modo per ottenere lo stesso ma senza admin-ajax.php?
Tahir Yasin,

1
@TheWPNovice Immagino che sia ancora nella /wp-admin/directory. Nota che non è necessario modificare o aggiungere nulla in quel file.
ifdion,

2

per prima cosa, lascia che ti dica che la convalida JavaScript funziona sul lato client. quindi se l'utente disabilita js, avrai dei problemi.

pertanto, è necessario convalidare anche i valori di input, lato server.

con quello in mente:

Il codice js può essere chiamato direttamente dalla pagina in cui si trova il modulo. L'attributo onsubmit è il solito modo di chiamarlo.

esempio

<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

Questa può essere anche la tua pagina modello personalizzata o single.php. in questo caso, 99 è l'ID della pagina specifica che si desidera indicare all'utente se è stato approvato o si è verificato un errore.

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]
    }
  }
}

Grazie peteroak per la risposta. Dove posso chiamare il codice PHP per elaborare ulteriormente i dati del modulo?
Pooja,

l'attributo action punterà a un file. in quel file puoi filtrare e validare il tuo modulo. aggiornerò la mia risposta per includerla.
pcarvalho,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.