Cum să gestionezi trimiterea formularului?
Sunt nou în WordPress și, prin urmare, mă confrunt cu câteva probleme.
Scenariul de utilizare este următorul:
- Un utilizator vede un formular de aplicație pentru a începe un club în școala sa.
- Utilizatorul completează formularul și apasă butonul 'Trimite'.
- Formularul trebuie validat.
- 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. - 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țiestoreInDB()
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.

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

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.

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

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

Î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 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.

@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.

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

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