Dacă vă alăturați acum, am acoperit o mulțime de subiecte din această serie - am încercat să oferim o prezentare completă a API-ului pentru setările WordPress, precum și funcțiile sale conexe. Am discutat despre setări, opțiuni, navigare și meniuri. De asemenea, am lucrat prin exemple practice care folosesc fiecare dintre subiectele pe care le-am discutat.
Aproape că am terminat. În ultimele două articole din această serie, vom examina sanitizarea, validarea și elementele de bază de intrare pe care le putem folosi în pluginurile și temele WordPress.
Înainte de a începe: Acest articol presupune că ați urmat împreună cu restul seriei, aveți o copie de lucru a exemplului de cod instalat și acum sunteți relativ familiarizați cu setările API și opțiunile de temă. Dacă nu sunteți sigur cu privire la oricare dintre cele de mai sus, vă recomandăm să citiți restul articolelor înainte de a vă scufunda în acest post.
Înainte de a începe să scriem un cod, trebuie să înțelegem cu exactitate ce anume vom realiza - și anume validarea și dezinfectarea. Pur și simplu, acestea sunt cele două aspecte legate de scrierea și citirea în siguranță a datelor dintr-o pagină de opțiuni WordPress și baza de date care stau la baza acesteia.
Ne vom străpunge mult mai adânc în acest lucru, pe măsură ce analizăm fiecare tip de intrare și vom lucra prin exemple, dar să dăm câteva contexte la ceea ce vom face de fapt:
Poate că cel mai concis rezumat este că validarea trebuie făcută înainte de a scrie datele către baza de date și trebuie să se facă o dezintoxicare între citirea datelor din baza de date și trimiterea lor către browser.
Adesea, validarea este legată de salvarea datelor și de dezintoxicare este legată de recuperarea datelor, dar este de asemenea posibilă complet dezinfectarea datelor după ce a trecut validarea pentru a vă asigura că numai date curate sunt salvate în baza de date. Când lucrăm cu propriul nostru cod, este mai ușor să facem acest lucru; cu toate acestea, nu putem întotdeauna să depindem de alți dezvoltatori pentru a-și dezinfecta datele, astfel încât responsabilitatea dezinfectării tuturor datelor care ies din baza de date să cadă asupra noastră.
Pentru a ușura înțelegerea completă a validării și dezintoxicării, introduceți o nouă filă în pagina noastră de opțiuni. Dacă ați introdus un nou meniu de nivel superior, aceasta va impune, de asemenea, adăugarea unui nou element de submeniu și actualizarea filei de afișare a opțiunilor. Să avem grijă de asta acum.
Mai întâi, localizați sandbox_example_theme_menu
și adăugați următorul element de submeniu:
add_submenu_page ('sandbox_theme_menu', 'Exemple de intrare', 'Exemple de intrare', 'administrator', 'sandbox_theme_input_examples', create_function (null, 'sandbox_theme_display (' input_examples ');));
Apoi, trebuie să mergem mai departe și să eliminăm o funcție care va crea grupul de opțiuni pentru noua filă setări. Presupunând că ați urmat împreună cu seria, acest lucru ar trebui să fie ușor de urmat:
funcția sandbox_theme_initialize_input_examples () if (false == get_option ('sandbox_theme_input_examples')) add_option ('sandbox_theme_input_examples'); // end if // end sandbox_theme_initialize_input_examples add_action ('admin_init', 'sandbox_theme_initialize_input_examples');
În cele din urmă, trebuie să actualizăm sandbox_theme_display
funcția de a face fila și a selecta-o corect atunci când este accesată fie prin intermediul filelor, fie prin submeniu. Mai întâi, să actualizăm condiționarea care examinează șirul de interogare și argumentele funcției. În mod specific, trebuie să se ocupe de caz pentru exemplele de intrare. Actualizați condiționarea pentru a arăta astfel:
dacă (isset ($ _GET ['tab'])) $ activ_tab = $ _GET ['tab']; altfel dacă ($ active_tab == 'social_options') $ active_tab = 'social_options'; altfel dacă ($ active_tab == 'input_examples') $ active_tab = 'input_examples'; altceva $ active_tab = 'display_options'; // sfârșit dacă / altceva
Apoi, trebuie să adăugăm o nouă filă în navigație. Actualizați nav-tab-înveliș
container pentru a include această nouă ancoră:
"> Exemple de intrare
În cele din urmă, trebuie să adăugăm încă o condiție elementului de formă responsabil pentru afișarea opțiunilor. Actualizați condiționarea pentru a arăta astfel:
dacă ($ active_tab == 'display_options') settings_fields ('sandbox_theme_display_options'); do_settings_sections ('sandbox_theme_display_options'); elseif ($ active_tab == 'social_options') settings_fields ('sandbox_theme_social_options'); do_settings_sections ("sandbox_theme_social_options"); altceva settings_fields ('sandbox_theme_input_examples'); do_settings_sections ('sandbox_theme_input_examples'); // sfârșit dacă / altceva
Presupunând că ați inclus corect codul, panoul de administrare ar trebui să arate astfel:
Suntem gata să începem să introducem noi elemente de opțiune și funcționalitatea de validare și dezinfectare. Dacă codul de mai sus pare neclar, asigurați-vă că ați verificat articolele din seria anterioară ca setările, paginile de meniu și filele au fost toate acoperite.
Există cinci tipuri de elemente de bază pe care le putem folosi pentru introducerea în paginile noastre de opțiuni WordPress. Acestea sunt intrări, textare, casete de selectare, butoane radio și casete selectate. În restul acestui articol, vom examina elementele de intrare și textare și vom revedea ultimele trei din ultimul articol din serie.
Elementele de intrare sunt ideale pentru situațiile în care trebuie să capturam o cantitate mică de text de la un utilizator. Acest lucru poate fi ceva de genul numelui sau numărului de telefon sau ceva puțin mai complex, ca adresa URL, adresa de e-mail sau o cheie API. De fapt, de fapt, deja folosim câmpuri de intrare pe pagina "Opțiuni sociale" atunci când solicităm adresele profilului de utilizator al rețelei sociale.
Validarea introducerii textului poate fi o operație complexă, mai ales dacă doriți să impuneți anumite constrângeri. De exemplu, numerele de telefon respectă un anumit format și dacă întrebați un utilizator pentru numărul său de telefon, puteți configura o funcție care determină dacă numărul de telefon aderă la formatul strict. Evident, nu putem capta toate aceste cazuri de utilizare în exemplele noastre, deoarece este pur și simplu un domeniu prea larg.
În schimb, ceea ce vom face este să ne asigurăm că niciun cod rău intenționat nu va fi scris în baza de date. Aceasta înseamnă că atunci când un utilizator introduce text în caseta noastră de text, vom elimina toate etichetele HTML și posibilele caractere problematice. Dar înainte de a face acest lucru, să introducem o nouă opțiune, să înțelegem marcajul și apoi să vedem ce se întâmplă dacă noi nu face impune orice tip de validare.
Continuați și introduceți noua secțiune și câmpul folosind sandbox_theme_initialize_input_examples
funcţie:
add_settings_section ('input_examples_section', 'Exemple de intrare', 'sandbox_input_examples_callback', 'sandbox_theme_input_examples'); add_settings_field ("Element de intrare", "Element de intrare", "sandbox_input_element_callback", "sandbox_theme_input_examples", "input_examples_section"); register_setting ('sandbox_theme_input_examples', 'sandbox_theme_input_examples');
Apoi definiți apelul pentru secțiunea:
funcția sandbox_input_examples_callback () echo 'Oferă exemple de cinci tipuri de elemente de bază.
„;
În cele din urmă, introduceți elementul de intrare real pe care îl vom folosi pentru capturarea intrărilor:
funcția sandbox_input_element_callback () $ options = get_option ('sandbox_theme_input_examples'); // Refaceți ecoul de ieșire '„;
Pagina de opțiuni ar trebui să arate acum ca următoarea imagine:
Până în acest moment, am creat elementele de opțiune și am menționat că vom discuta în cele din urmă fiecare dintre atributele ulterioare din serie. Acesta este articolul în care începem să ne uităm la importanța id
și Nume
atribute.
Rețineți că la începutul funcției citim opțiunile pentru această filă folosind WordPress ' get_option
funcţie. Această funcție va returna opțiunile într-un matrice. id
atributul elementului de intrare identifică valoarea acestui element în matrice. Nume
atributul este numele matricei tastate cu ID-ul. Are sens?
Pentru a fi complet, gândiți-vă în acest fel:
sandbox_theme_input_examples
id
atribut. În acest exemplu, este "input_example
"sandbox_theme_input_examples [input_example]
Asa ca id
al elementului reprezintă cheia valorii din matricea opțiunilor, Nume
atributul reprezintă numele matricei cu cheia valorii din matrice.
În acest moment, este complet posibil să începeți introducerea valorilor în elementul de intrare și să salvați opțiunea. Mergeți mai departe și încercați - setați o valoare, dați clic pe "Salvați modificările" și ar trebui să vedeți elementul de intrare să afișeze valoarea pe care tocmai ați creat-o. Dar iată problema: încercați să inserați ceva de genul acesta în câmpul de intrare:
Apoi, treceți la index.php și adăugați următorul bloc de cod:
Reîmprospătați pagina de pornire și ar trebui să observați o iframe afișată în mijlocul paginii principale a temei:
Pare o problemă relativ minoră, dar acesta este exact tipul de lucru pe care trebuie să-l prevenim. Nu vrem ca utilizatorii să aibă un astfel de control asupra bazei de date, a paginilor de site și așa mai departe. Desigur, salvarea unei iframe simple este un exemplu minor - dacă utilizatorii pot introduce JavaScript, atunci pot influența anumite aspecte ale întregului site. Chiar mai grave, dacă utilizatorii pot să introducă SQL rău intenționat, baza de date ar putea fi compromisă.
Deci, să introducem o validare. Așa cum am menționat mai sus, dorim să eliminăm orice marcaj și caractere problematice. Pentru a face acest lucru, trebuie să definim mai întâi un apel de validare pentru secțiunea elementului de intrare. Pentru a face acest lucru, să revizuim register_setting
apelați și actualizați-l astfel încât să pară următoarele:
register_setting ('sandbox_theme_input_examples', 'sandbox_theme_input_examples', 'sandbox_theme_validate_input_examples');
În continuare, să definim această funcție:
funcția sandbox_theme_validate_input_examples ($ input) // end sandbox_theme_validate_input_examples
Observați că această funcție acceptă un singur parametru pe care l-am denumit intrare
. Acest argument reprezintă setul nevalidat de opțiuni pe care WordPress îl trimite acestei funcții din pagina de opțiuni pe care tocmai l-am salvat. Rețineți, de asemenea, că, pe măsură ce adăugăm elemente de opțiune suplimentare, vom folosi aceeași funcție.
Crearea unei funcții de validare are în mod obișnuit trei pași:
Să facem asta acum. Aruncați o privire la următoarea implementare, acordând o atenție deosebită comentariilor:
funcția sandbox_theme_validate_input_examples ($ input) // Crearea matricei noastre pentru stocarea opțiunilor validate $ output = array (); // Introduceți buclă prin fiecare dintre opțiunile primite ($ input as $ key => $ value) // Verificați dacă opțiunea curentă are o valoare. Dacă da, procesați-l. dacă isset ($ input [$ key])) // Strip toate etichetele HTML și PHP și manipulează corect șirurile cotate $ output [$ key] = strip_tags (stripslashes ($ input [$ key])); // end if // fore foreach // Returnați matricea de procesare a oricăror funcții suplimentare filtrate de această acțiune return_apply_filters ('sandbox_theme_validate_input_examples', $ output, $ input);
Cea mai mare parte a codului ar trebui să fie relativ simplă, dar cele două aspecte cele mai importante apar în declarația din declarația condiționată și din declarația de returnare.
strip_tags
, care este nativ la PHP, pentru eliminarea tuturor etichetelor HTML și PHPstripslashes
funcția, care este o altă funcție nativă PHP, care va gestiona corect ghilimele în jurul unui șir.În cele din urmă, am fi putut întoarce pur și simplu $ ieșire
array la sfârșitul funcției, dar returnează rezultatul apelului la apply_filters
este o bună practică. Deși depășește domeniul de aplicare al acestui articol, merită menționat faptul că această declarație solicită practic orice alte funcții care sunt filtrate de această funcție înainte de a returna valoarea.
Acum, încercați să introduceți o intrare de probă în elementul de intrare. Încercați să furnizați un șir simplu, un număr de telefon, o adresă de e-mail, o adresă URL, un bloc de cod HTML, o linie de JavaScript și așa mai departe. Neat, huh?
În cele din urmă, să revizuiți index.php și oferim o ultimă schimbare pentru a demonstra modul în care putem efectua dezinfectarea de ieșire. Amintiți-vă, este o practică bună să dezinstalați opțiunile chiar dacă lucrați cu valori care nu vin din propria voastră muncă.
Localizați linia care citește:
Actualizați-l astfel încât să scrie:
sanitize_text_field
funcția este o altă funcție nativă WordPress care este menită în mod special să dezinstaleze intrarea utilizatorilor din câmpurile de text sau din baza de date.
Vom analiza mai mult în tot acest articol și în următorul, dar există o listă completă a acestor funcții disponibile în Codul WordPress.
Când ne uităm la elementele de intrare, am acoperit mult de teren. Din fericire, multe din aceleași principii se aplică nu numai pentru textare, ci și pentru restul elementelor. Ca atare, nu ar trebui să petrecem cât mai mult timp cu fiecare element. Acest lucru ne va permite să privim la unele din idiosincraziile care vin cu fiecare dintre elementele elementare.
Pentru moment, să introducem un element textarea. În exemplul nostru, acest element special va permite utilizatorilor să introducă câteva propoziții despre ele însele - gândiți-vă la acestea ca la un scurt bio. Mai întâi, adăugați următorul apel la sandbox_theme_initialize_input_examples
funcţie:
add_settings_field ('Textarea Element', 'Textarea Element', 'sandbox_textarea_element_callback', 'sandbox_theme_input_examples', 'input_examples_section');
Apoi, definim apelul necesar pentru redarea textarea:
funcția sandbox_textarea_element_callback () $ options = get_option ('sandbox_theme_input_examples'); // Refaceți ecoul de ieșire '„;
Observați că acest apel se comportă foarte similar cu elementul de intrare definit mai sus. Mai exact, am furnizat un id
atribut pentru a da această valoare o cheie în matricea opțiunilor și am specificat numele exact și cheia în elementul Nume
atribut. De asemenea, am dat textarea unei dimensiuni particulare, deși acest lucru este pur arbitrar.
Amintiți-vă că, deoarece acest element aparține aceleiași secțiuni ca elementul de intrare, acesta este procesat utilizând aceeași funcție de validare. Ca atare, obținem același nivel de validare gratuit. Încercați-l - încercați să salvați marcajele, scripturile și alte tipuri de coduri folosind textarea.
În cele din urmă, să actualizăm pagina dedicată publicului temei noastre pentru a recupera această valoare și ao dezinfecta corespunzător pentru afișare. În index.php, adăugați următorul bloc de cod:
Deși este practic același lucru cu câmpul de intrare, trebuie să ne asigurăm că suntem complet în validarea și dezinfectarea.
Deși am analizat numai două tipuri de elemente, am acoperit o mulțime de teren. Pe lângă aducerea temei noastre la zi, am implementat de asemenea validarea de bază și am început să explorăm caracteristicile de dezinsecție a WordPress.
În ultimul articol, vom examina celelalte trei tipuri de elemente și cum să le gestionăm utilizând validarea și dezinfectarea. Între timp, experimentați cu câteva din ceea ce am abordat aici și nu uitați să revizuiți articolele legate de sursa legate în partea de jos a postării.
get_option
strip_tags
stripslashes
apply_filters
sanitize_text_field