În această serie, ne-am uitat la modul de a crea un simplu sistem CRM în WordPress. În prima parte a acestei serii, am creat un Plugin WordPress care a înregistrat un tip de mesaj personalizat pentru "Persoane de contact", dar nu am încă să acoperim cum să stocăm informații suplimentare pentru o persoană de contact.
WordPress are add_meta_box ()
, care permite dezvoltatorilor de plugin-uri și temă să înregistreze casete meta personalizate împotriva diferitelor ecrane de administrare WordPress.
WordPress înregistrează unele dintre propriile casete de meta pentru a fi afișate atunci când creați o postare sau o pagină. De exemplu, pe Pagini, aveți Atribute de pagină meta box:
Să adăugăm o casetă de meta-uri nouă Contacte post tip personalizat. Deschideți fișierul plugin creat în primul tutorial din această serie. Apoi, în constructorul plugin-ului, actualizați codul pentru a se potrivi cu cel de mai jos. Aceasta ne înregistrează register_meta_boxes ()
funcționează împotriva add_meta_boxes
acțiune:
/ ** * Constructor. Chemată când pluginul este inițializat * / funcția __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('add_meta_boxes', array ($ this, 'register_meta_boxes'));
Apoi, în camera noastră register_meta_boxes ()
funcția, adăugăm un apel la add_meta_box ()
. Acest lucru spune WordPress că vrem o casetă de meta numită Detalii de contact, care este redat de către nostru output_meta_box ()
funcţie. Adăugați codul de mai jos după funcția constructorului:
/ ** * Înregistrează o Meta Box pe tipul nostru de post particularizat de contact, numit 'Detalii de contact' * / funcția register_meta_boxes () add_meta_box ('contact-details', 'Detalii de contact', array ($ this, 'output_meta_box' "contact", "normal", "mare");
În cele din urmă, avem nevoie de un output_meta_box ()
funcție, care este numită de add_meta_box
de mai sus. Adăugați codul de mai jos după register_meta_boxes ()
funcţie:
/ ** * Output a Detalii de contact meta box * * @param WP_Post $ post WordPress Post object * / function output_meta_box ($ post)
Să verificăm dacă avem o meta-casetă care apare pe site-ul nostru Contacte post tip personalizat. Creați un nou contact în tabloul de bord WordPress accesând Contacte> Adăugați o adresă nouă.
Dacă totul a fost scris corect, ar trebui să vedeți ceva similar cu ecranul următor:
Să mergem mai departe și să adăugăm un câmp de adresă de e-mail la această căsuță meta. Schimba-ti output_meta_box
funcție de codul de mai jos:
/ ** * Output a Detalii de contact meta box * * @param WP_Post $ post WordPress Post object * / function output_meta_box ($ post) // Eticheta de ieșire și ecoul de câmp (''); echo ('');
Salvați codul pluginului și reîncărcați ecranul Adăugați contact. Ar trebui să vedeți că noul câmp de adresă de e-mail apare în caseta meta Detalii de contact:
Încă nu am terminat. Trebuie să-i spunem WordPress să salveze conținutul pe care un utilizator îl introduce în acest câmp. În WordPress, facem acest lucru prin înregistrarea unei funcții împotriva save_post
acțiune.
Ca și în majoritatea acțiunilor, vom înregistra acțiunea noastră în constructorul pluginului:
/ ** * Constructor. Chemată când pluginul este inițializat * / funcția __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('add_meta_boxes', array ($ this, 'register_meta_boxes')); add_action ('save_post', array ($ this, 'save_meta_boxes'));
Apoi, să ne creăm save_meta_boxes ()
funcţie:
/ ** * Salvează datele din câmpul meta-box * * @param int $ post_id Post ID * / funcția save_meta_boxes ($ post_id) // Verificați dacă este tipul de contact Custom Post if ('contact'! = $ _POST ['post_type ']) returnați $ post_id; // Verificați dacă utilizatorul logat are permisiunea de a edita această postare dacă (! Current_user_can ('edit_post', $ post_id)) return $ post_id; // OK pentru a salva metadatele $ email = sanitize_text_field ($ _POST ['contact_email']); update_post_meta ($ post_id, '_contact_email', $ email);
Această funcție efectuează mai multe acțiuni, deoarece save_post
acțiunea poate fi numită destul de frecvent de WordPress și de alte pluginuri (de exemplu, când se salvează periodic o salvare automată sau se salvează un alt tip de post). Trebuie să fim siguri că salvăm doar datele personalizate ale câmpului dacă utilizatorul a salvat sau a actualizat un Contact.
Dacă salvăm un contact, dezinfectăm adresa de e-mail. Din Codul WordPress:
Verifică nevalabil UTF-8, Convertizor unic < characters to entity, strip all tags, remove line breaks, tabs and extra white space, strip octets.
Pe scurt, ne asigurăm că nu există formatare funky pe șirul nostru de text.
În cele din urmă, stocăm adresa de e-mail în meta-datele post, folosind update_post_meta
. Gândiți-vă la post meta ca o serie de perechi cheie / valoare care sunt atașate la un post. Puteți avea cât mai puțini sau mai mulți pe cât doriți. În exemplul nostru, stocăm valoarea câmpului nostru personalizat împotriva cheii _emailul de contact
.
Creaza un nou a lua legatura și introduceți o adresă de e-mail. Salvați noul contact și veți observa că adresa de e-mail nu apare în câmp:
Trebuie să ne editați output_meta_box ()
pentru a citi meta-ul Post și a afișa-o în câmpul de introducere. Schimba output_meta_box ()
funcție de codul de mai jos:
/ ** * Ieșire o Detalii de contact meta box * * @param WP_Post $ Post WordPress Post object * / function output_meta_box ($ post) $ email = get_post_meta ($ post-> ID, '_contact_email', true); // Etichetă de ieșire și ecou de câmp (''); echo ('');
Folosim get_post_meta ()
pentru a obține valoarea pentru combinația de date Post ID și meta. Știm meta-cheie _emailul de contact
, ca asta am folosit când am salvat valoarea câmpului personalizat în update_post_meta ()
Securitatea este extrem important atunci când trimiteți și manipulați datele formularului. Trebuie să știm că sursa datelor noastre este de încredere atunci când o salvăm. Dacă nu putem avea încredere în sursa datelor noastre, nu trebuie să le stocăm - datele pot fi compromise sau corupte într-un mod să încerce să exploateze o eroare sau o eroare de securitate.
WordPress ne furnizează nonces (un "număr utilizat o singură dată"), care poate fi trimis împreună cu datele formularului. Această nonce poate fi verificată atunci când rutina noastră de salvare rulează, pentru a se asigura că se potrivește cu valoarea pe care ne-am aștepta.
Acest lucru contribuie la prevenirea atacurilor de tip "forgery request" (CSRF), adică la cineva care încearcă să trimită datele formularului în rutina noastră de salvare dintr-un site web diferit.
Trebuie să adăugăm în siguranță codul de mai sus în două locuri:
output_meta_box ()
: adăugați o valoare nonce la formularsave_meta_boxes ()
: verificați o valoare nonce prezentatăSă editați output_meta_box ()
funcție, înlocuind-o cu codul de mai jos:
/ ** * Ieșire o Detalii de contact meta box * * @param WP_Post $ Post WordPress Post object * / function output_meta_box ($ post) $ email = get_post_meta ($ post-> ID, '_contact_email', true); // Adăugați un câmp nonce pentru a putea verifica mai târziu. wp_nonce_field ('save_contact', 'contacts_nonce'); // Etichetă de ieșire și ecou de câmp (''); echo ('');
Aceasta folosește wp_nonce_field ()
, pentru a genera un câmp ascuns numit contacts_nonce
, cu o acțiune numită save_contact
. Valoarea sa este generată de WordPress.
Apoi, editați rutina de salvare în save_meta_boxes ()
:
/ ** * Salvează datele din câmpul meta-box * * @param int $ post_id ID-ul postului * / funcția save_meta_boxes ($ post_id) // Verificați dacă setul nostru nonce este setat. dacă (! isset ($ _POST ['contacts_nonce'])) returnați $ post_id; // Verificați dacă nonce este valid. dacă (! wp_verify_nonce ($ _POST ['contacts_nonce'], 'save_contact')) returnați $ post_id; // Verificați dacă este tipul de contact personalizat de contact dacă ('contact'! = $ _POST ['post_type']) return $ post_id; // Verificați dacă utilizatorul logat are permisiunea de a edita această postare dacă (! Current_user_can ('edit_post', $ post_id)) return $ post_id; // OK pentru a salva metadatele $ email = sanitize_text_field ($ _POST ['contact_email']); update_post_meta ($ post_id, '_contact_email', $ email);
Aceasta adaugă două verificări pentru rutina noastră salvată:
Creați sau editați-vă a lua legatura, și asigurați-vă că adresa de e-mail este acum salvată.
În următorul articol, vom folosi câmpurile personalizate avansate pentru a adăuga câmpuri personalizate la adresa noastră a lua legatura post tip personalizat, permițându-ne să creăm o interfață de utilizator bogată cu o gamă mai largă de tipuri de intrări.