În acest tutorial, veți afla cum să creați un plugin care să permită utilizatorilor să trimită date de formular. Veți învăța, de asemenea, despre securitate, utilizând nonces.
Codurile scurte sunt adesea folosite pentru a afișa date simple, dar pentru că sunt într-adevăr o modalitate de a ramifica dintr-o pagină sau un post și de a executa un cod, ele pot fi folosite pentru sarcini destul de complexe, cum ar fi afișarea și prelucrarea formularelor.
Vom construi un plugin care va permite utilizatorilor conectați să:
Iată la ce vrem:
Toate codurile sunt disponibile în sursa pluginului din partea de sus a acestui tutorial.
Dosarul plugin WordPress este localizat în folderul de instalare WordPress la wp-content / plugins
. Creați un dosar în interiorul dosarului de pluginuri. Să spunem asta submit-user-citate
. Acum, creați fișierul plugin-ului însuși. Să spunem asta submit_user_quotes.php
. Calea către fișierul pluginului trebuie să fie acum: wp-content / plugins / trimiteți-user-citate / submit_user_quotes.php
Fiecare plugin Wordpress are nevoie de câteva informații antet, astfel încât WordPress să o poată identifica și să o pună la dispoziție pe pagina de plugin a tabloului de bord.
Puteți edita aceste informații conform cerințelor dvs..
Veți vedea pluginul afișat astfel:
Pasul 2 Funcția de inițializare a pluginului
Vom crea un tip de post personalizat numit Citate pentru a ne păstra cotațiile și o taxonomie personalizată numită quote_category. Acest lucru va permite o administrare mai curată a cotelor decât să le alocați pur și simplu posturilor și categoriilor normale.
Cârligul și funcția init
Vom folosi următorul cod de inițiere pentru a crea tipul de post personalizat și taxonomia personalizată:
add_action ('init', 'suq_plugin_init'); funcția suq_plugin_init () $ quote_type_labels = array ('nume' => _x ('Citate', 'nume post general'), 'singular_name' => '=> _x (' Adăugați o nouă cotație ',' citat '),' add_new_item '=> __ (' 'Citează cotația'), 'all_items' => __ ('View Quotes'), 'view_item' => __ (' > __ ("Nu au fost găsite citate"), "not_found_in_trash" => __ ("Nu s-au găsit citate în coșul de gunoi"), "parent_item_colon" => "," menu_name "=>" Citate ") $ quote_type_args = '=> true,' rewrite '=> true,' capability_type '=>' post ',' has_archive '=> true,' hierarchical ' 'quote_category_labels = array (' name '=> _x ("nume" => "Categorii de citare", "nume general de taxonomie"), "singular_name" => _x ( ("Categorii de cotație de căutare"), "all_items" => __ ("Toate categoriile de cotatii"), "parent_item" => __ (" '', 'update_item' => __ ('Categoria de cotație de actualizare'), 'add_new_item' = 'parent_item_colon' => > __ ("Adăugați o nouă categorie de citare"), "new_item_name" => __ ("Nume nou de cotă"), "nume_menu" => __ ("Categorii de cotatii");); $ quote_category_args = array ('hierarchical' => true, 'labels' => quote_category_labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array ('slug' => quote_category) ,); register_taxonomy ('quote_category', array ('citate'), $ quote_category_args); $ default_quote_cats = array ("umor", "politică", "sport", "filozofie"); foreach ($ default_quote_cats ca $ cat) if (! term_exists ($ cat, 'quote_category')) wp_insert_term ($ cat, 'quote_category');Ce face acest cod:
Acum vom avea un meniu Cotații în tabloul de bord al adminului nostru și o modalitate de a administra ghilimele și categoriile acestora.
Apoi, vom defini un cod scurt care ne va permite să afișăm (și să procesăm) formularul de trimitere a cotelor de utilizator într-o postare sau o pagină:
add_shortcode ('suq_form', 'suq_form_shortcode');
Aici folosim funcția WordPress add_shortcode pentru a defini un scurtcod numit suq_form și o funcție numită suq_form_shortcode care va fi apelată ori de câte ori WordPress întâlnește codul scurt [suq_form] într-o postare sau o pagină.
Înainte de a ne uita la funcțiile de afișare și prelucrare a formularului, să vorbim puțin despre?
Deoarece pluginul acceptă date de la utilizator, implementăm următoarele mecanisme de securitate:
Un nonce este un număr folosit o dată. Le folosim pentru a verifica dacă datele care ne revin sunt de fapt din formele pe care le-am creat.
Aici generăm un câmp nonce folosind wp_nonce_field care va fi inclus în forma noastră ca un câmp ascuns:
wp_nonce_field ('suq_form_create_quote', 'suq_form_create_quote_submitted');
Pentru că acum este un câmp ascuns în forma noastră, se va întoarce la noi când se va trimite formularul. Apoi, putem verifica dacă nonce este valid utilizând wp_verify_nonce:
wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote'))
Asta se va întoarce adevărat dacă verificarea nu este confirmată.
Aceasta este funcția numită de codul nostru scurt. Afișează și procesează formularul de trimitere a cotei și formularul de listare / ștergere a cotelor. O vom lua în bucăți de mâncare și în pasul 5 vom analiza funcțiile de ajutor.
funcția suq_form_shortcode () if (! is_user_logged_in ()) return 'Trebuie sa fiti logat pentru a posta un citat.
„; global $ current_user;
($ _POST ['suq_form_create_quote_submitted']) && wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote')) $ suq_quote_author = trim ($ _ POST ['suq_quote_author']); $ suq_quote_text = trim ($ _ POST ['suq_quote_text']); dacă "$ suq_quote_author! =" && $ suq_quote_text! = ") $ quote_data = array ('post_title' => $ suq_quote_author, 'post_content' => $ suq_quote_text, 'post_status' => $ current_user-> ID, 'post_type' => 'citate'); dacă quote_id = wp_insert_post ($ quote_data)) wp_set_object_terms ($ quote_id, (int) $ _ POST ['suq_quote_category'], 'quote_category'); echo "Citat creat și așteptând moderare!
„; altceva // câmpul autor sau text este ecou gol 'Citat NU este salvat! Cine a spus asta? și Citat nu trebuie să fie goale.
„;
dacă isset ($ _POST ['suq_form_delete_submitted']) && wp_verify_nonce ($ _ POST ['suq_form_delete_submitted'], 'suq_form_delete')) if ($ quote_deleted = suq_delete_quotes $ _POST ['suq_delete_id'])) echo '". $ quotes_deleted. "citatele au fost șterse!
„;
echo suq_get_create_quote_form ($ suq_quote_author, $ suq_quote_text, $ suq_quote_category); dacă ($ quotes_table = suq_get_user_quotes ($ curent_user-> ID)) echo $ quotes_table;
Aici vom examina funcțiile care generează formularele și funcția care șterge ghilimele selectate.
funcția suq_get_create_quote_form ($ suq_quote_author = ", $ suq_quote_text =", $ suq_quote_category = 0) $ out. = '„; returnați $ out;
funcția suq_get_quote_categories_dropdown (taxonomie $, selectată $) return wp_dropdown_categories (array ('taxonomy' => $ taxonomy, 'name' => 'suq_quote_category', 'selected' => $ selected, 'hide_empty' => 0));
funcția suq_get_user_quotes ($ user_id) $ args = array ('author' => $ user_id, 'post_type' => 'citate', 'post_status' => 'în așteptare'); $ posts = nou WP_Query ($ args); dacă (! $ posts-> post_count) retur 0; $ out = '„; returnați $ out;Citatele dvs. nepublicate
„; $ out = '
Formularele pot fi manipulate în browser pentru a publica date neașteptate. În cazul nostru, în fiecare casetă de ștergere este atribuită valoarea unei postări. Dar dacă un utilizator rău intenționat a modificat acea valoare și a determinat funcția de ștergere să elimine o postare care nu a fost înregistrată?
O modalitate de a evita acest lucru este de a utiliza nonces pentru fiecare rând de date post, asigurându-se că noncesurile sunt denumite în mod unic cu valoarea postului care urmează să fie ștearsă. Apoi, verificăm nonce după trimiterea formularului pentru a ne asigura că este o valoare reală de returnare.
funcția suq_delete_quotes ($ quotes_to_delete) $ quotes_deleted = 0; foreach ($ quotes_to_delete ca $ quote) if (isset ($ _ POST ['suq_post_delete_id_'. $ quote]) && wp_verify_nonce ($ _ POST ['suq_post_delete_id_'. citat); $ cotes_deleted ++; returnează $ quotes_deleted;
Puneți doar informațiile despre acest stil în fișierul style.css din dosarul tematic:
#suq_quote_author width: 300px; #suq_quote_text width: 400px; height: 100px; #cotări font-size: 12px; #quotes th text-aliniere: stânga;
Activați pluginul, plasați codul scurt pe o pagină, conectați-vă la site-ul dvs. și testați-l.
În partea de sus a acestui tutorial este afișată sursa codului complet de plugin și un link de site demo.
Dosarul sursă conține, de asemenea, un șablon de pagină Wordpress cu o buclă personalizată care afișează citate publicate pentru toți utilizatorii.