Cum să gestionezi trimiterea formularului?

4 aug. 2012, 00:56:23
Vizualizări: 54.5K
Voturi: 17

Sunt nou în WordPress și, prin urmare, mă confrunt cu câteva probleme.

Scenariul de utilizare este următorul:

  1. Un utilizator vede un formular de aplicație pentru a începe un club în școala sa.
  2. Utilizatorul completează formularul și apasă butonul 'Trimite'.
  3. Formularul trebuie validat.
  4. Dacă validarea este reușită, datele sunt stocate în tabela personalizată club_details din baza de date și utilizatorului i se arată un mesaj (ex: Mulțumim pentru trimitere. Aplicația ta a fost trimisă administratorului pentru aprobare.) în caz contrar sunt afișate mesaje de eroare corespunzătoare.
  5. Administratorul merge în panoul de administrare WordPress pentru a aproba cererile în așteptare pentru club. (Datele sunt preluate din baza de date și afișate administratorului).

Am făcut următoarele:

  • pentru 1) Am creat un formular/pagină de aplicație folosind editorul HTML WordPress.
  • pentru 3) Am un fișier javascript (validation.js) care conține codul de validare.
  • pentru 4) Am un fișier php (club-functions.php) care are o funcție storeInDB() pentru a stoca detaliile aplicației în tabela personalizată din baza de date.
  • pentru 5) Am creat propriul meu folder de plugin și am adăugat un fișier php (club.php) care afișează detaliile aplicației administratorului în panoul de administrare WordPress.

M-am blocat în următorul punct: Cum să gestionez trimiterea formularului. Unde ar trebui să pun codul care apelează funcția de validare javascript și apoi apelează funcția storeInDB().

Vă rog să-mi oferiți câteva sugestii despre cum pot realiza acest lucru și dacă această abordare este bună? Mulțumesc mult în avans.

0
Toate răspunsurile la întrebare 2
9
16

Ar trebui să folosești funcțiile wp_ajax sau wp_ajax_nopriv.

Mai întâi trebuie să pui URL-ul admin-ajax ca valoare a atributului action în formularul de trimitere.

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

În acest fel, formularul va fi trimis către admin-ajax.php implicit (fără JavaScript). Poți folosi JavaScript pentru a-l face să funcționeze folosind AJAX.

Următorul pas este funcția care va folosi datele trimise. În interiorul formularului, pune un wp_nonce_field și un input hidden cu numele action. Valoarea mea pentru action este add_transfer.

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

Poți pune funcția care va gestiona acest formular în functions.php sau în fișierul tău de plugin. Poți folosi wp_ajax_ + numele acțiunii dacă acesta este un formular doar pentru utilizatorii autentificați. Pentru utilizatorii neautentificați, folosește wp_ajax_nopriv + numele acțiunii.

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 'Ai țintit funcția corectă, dar ne pare rău, nonce-ul tău nu s-a verificat.';
        die();
    } else {
        // fă ceva aici 
        wp_redirect($redirect_url_for_non_ajax_request);
    }
}
4 aug. 2012 02:39:00
Comentarii

Mulțumesc ifdion pentru răspuns. Creez formularul în 'Wordpress HTML editor'. Deci, este bine să includ cod php în formular având în vedere că va trebui să instalez plugin-ul 'Exec-PHP' care cred că este exagerat? Te rog să îmi împărtășești părerea.

Pooja Pooja
4 aug. 2012 17:00:39

Pur și simplu înlocuiește valoarea action cu http://your-site-url.com/wp-admin/admin-ajax.php.

ifdion ifdion
5 aug. 2012 00:36:46

Funcționează asta?

ifdion ifdion
9 aug. 2012 00:55:33

există o metodă bună de a obține același lucru fără admin-ajax.php?

Tahir Yasin Tahir Yasin
19 feb. 2014 12:17:40

Îmi dau seama că acesta este un răspuns vechi, dar acest lucru nu va funcționa deoarece wp_redirect nu va face nimic aici; cererile AJAX rulează în fundal și wp_redirect este doar un wrapper inteligent pentru un apel header('location:...') care trebuie rulat înainte de afișarea conținutului. Dacă doriți o redirecționare după un apel AJAX, trebuie să returnați un URL și să gestionați redirecționarea prin JS. Pentru referință: http://wordpress.stackexchange.com/a/133939/17826

indextwo indextwo
9 sept. 2015 15:27:45

@indextwo mulțumesc pentru comentariu. Ai dreptate, este nevoie de un URL corect care să fie returnat și apoi redirecționat prin JS, pentru o cerere AJAX. wp_redirect nu va fi de folos într-o cerere AJAX. Dar răspunsul meu nu folosește JS, prin urmare nu este o cerere AJAX, deși utilizează funcțiile wp_ajax și wp_ajax_nopriv. wp_redirect este folosit pentru a trimite utilizatorul departe de pagina goală wp-admin/admin-ajax.php. Sper că acest lucru clarifică situația.

ifdion ifdion
10 sept. 2015 19:18:13

'admin-ajax.php' → unde se află acest fișier? Adică în ce folder?

WordCent WordCent
26 feb. 2019 12:06:27

@TheWPNovice Cred că este tot în directorul /wp-admin/. Reține că nu este nevoie să modifici sau să adaugi nimic în acel fișier.

ifdion ifdion
27 feb. 2019 08:59:31

Poate funcționa acest sistem și pe un formular care încearcă să trimită email?

WordCent WordCent
27 feb. 2019 19:06:00
Arată celelalte 4 comentarii
2

În primul rând, permiteți-mi să vă spun că validarea JavaScript funcționează pe partea de client. Deci, dacă utilizatorul dezactivează JavaScript, veți avea probleme.

Prin urmare, ar trebui să validați și valorile introduse pe partea de server.

Ținând cont de aceste aspecte:

Codul JavaScript poate fi apelat direct din pagina unde se află formularul. Atributul onsubmit este modalitatea obișnuită de a-l apela.

exemplu

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Aplicație</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="Trimite" />
</form>

page.php

Aceasta poate fi și pagina șablon personalizată sau single.php. În acest caz, 99 este ID-ul paginii specifice pe care doriți să o indicați utilizatorului dacă a fost aprobată sau a avut o eroare.

if ( get_the_ID() == '99' ) {
  // să validăm inputul
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // verificați codex-ul pentru [Validarea_Datelor][1]
    }
  }
}
4 aug. 2012 01:38:09
Comentarii

Mulțumesc peteroak pentru răspuns. Unde pot apela codul PHP pentru a prelucra în continuare datele din formular?

Pooja Pooja
4 aug. 2012 17:02:00

atributul action va indica către un fișier. în acel fișier poți filtra și valida formularul. voi actualiza răspunsul meu pentru a include acest lucru.

pcarvalho pcarvalho
4 aug. 2012 22:37:11