In questo tutorial, imparerai come creare un plug-in che consenta agli utenti di inviare i dati del modulo. Imparerai anche a conoscere la sicurezza usando nonces.
Gli shortcode sono spesso usati per visualizzare dati semplici, ma poiché sono in realtà un modo per dirottare una pagina o postare ed eseguire codice, possono essere usati per compiti abbastanza complessi, come la visualizzazione e l'elaborazione di moduli.
Costruiremo un plug-in che consentirà agli utenti registrati di:
Ecco a cosa miriamo:
Tutto il codice è disponibile nella sorgente del plugin nella parte superiore di questo tutorial.
La cartella del plugin WordPress si trova nella cartella di installazione di WordPress all'indirizzo wp-content / plugins
. Crea una cartella all'interno della cartella dei plugin. Chiamiamolo submit-user-citazioni
. Ora crea il file di plugin stesso. Chiamiamolo submit_user_quotes.php
. Il percorso del tuo file plugin dovrebbe ora essere: wp-content / plugins / inviare-user-quotes / submit_user_quotes.php
Ogni plugin Wordpress necessita di alcune informazioni di intestazione in modo che WordPress possa identificarlo e renderlo disponibile nella pagina del plug-in del dashboard.
Puoi modificare queste informazioni secondo le tue esigenze.
Vedrai il plugin elencato in questo modo:
Fase 2 Inizializzazione del plugin
Creeremo un tipo di post personalizzato denominato Quotes per contenere le nostre citazioni e una tassonomia personalizzata denominata quote_categoria. Ciò consentirà un'amministrazione più pulita delle virgolette piuttosto che assegnarle a normali post e categorie.
Il gancio e la funzione Init
Utilizzeremo il seguente codice di inizializzazione per creare il nostro tipo di post personalizzato e la nostra tassonomia personalizzata:
add_action ('init', 'suq_plugin_init'); function suq_plugin_init () $ quote_type_labels = array ('name' => _x ('Quotes', 'nome del tipo generico'), 'singular_name' => _x ('Quote', 'post type singular name'), 'add_new '=> _x (' Aggiungi nuovo preventivo ',' quota '),' add_new_item '=> __ (' Aggiungi nuovo preventivo '),' edit_item '=> __ (' Modifica preventivo '),' new_item '=> __ ( 'Aggiungi nuovo preventivo'), 'all_items' => __ ('Visualizza quotazioni'), 'view_item' => __ ('Visualizza preventivo'), 'search_items' => __ ('Query di ricerca'), 'not_found' = > __ ('Nessuna citazione trovata'), 'not_found_in_trash' => __ ('Nessuna citazione trovata nel cestino'), 'parent_item_colon' => ", 'menu_name' => 'Quotazioni'); $ quote_type_args = array ('etichette '=> $ quote_type_labels,' public '=> true,' query_var '=> true,' rewrite '=> true,' capability_type '=>' post ',' has_archive '=> true,' hierarchical '=> false, 'menu_position' => null, 'supports' => array ('title', 'editor', 'author')); register_post_type ('quotes', $ quote_type_args); $ quote_category_labels = array ('name' => _x ( 'Quote categories', 'taxonomy general name'), 'singular_name' => _x ( 'Quote', 'nome tassonomio singolare'), 'search_items' => __ ('Cerca categorie di preventivo'), 'all_items' => __ ('Tutte le categorie di preventivo'), 'parent_item' => __ ('Parent Quote Category '),' parent_item_colon '=> __ (' Parent Quote Category: '),' edit_item '=> __ (' Modifica categoria quote '),' update_item '=> __ (' Aggiorna quotazione categoria '),' add_new_item '= > __ ('Aggiungi nuova categoria di quotazioni'), 'new_item_name' => __ ('Nuovo nome preventivo'), 'menu_name' => __ ('Categorie di preventivo'),); $ 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 ('quotes'), $ quote_category_args); $ default_quote_cats = array ('humor', 'politics', 'sport', 'filosofia'); foreach ($ default_quote_cats as $ cat) if (! term_exists ($ cat, 'quote_category')) wp_insert_term ($ cat, 'quote_categoria');Cosa fa questo codice:
Ora avremo un menu di preventivi nella nostra bacheca di amministrazione e un modo per amministrare le citazioni e le loro categorie.
Successivamente, definiremo uno shortcode che ci consentirà di visualizzare (ed elaborare) il modulo di invio delle citazioni dell'utente in un post o una pagina:
add_shortcode ('suq_form', 'suq_form_shortcode');
Qui usiamo la funzione add_shortcode di WordPress per definire uno shortcode chiamato suq_form e una funzione chiamata suq_form_shortcode che verrà chiamata ogni volta che WordPress incontra lo shortcode [suq_form] in un post o una pagina.
Prima di esaminare le funzioni di visualizzazione e elaborazione dei moduli, parliamo un po '?
Poiché il nostro plugin accetta i dati dell'utente, implementiamo i seguenti meccanismi di sicurezza:
Un nonce è un numero usato una volta. Li usiamo per verificare che i dati che ci vengono restituiti provengano effettivamente dai moduli che abbiamo creato.
Qui generiamo un campo nonce usando wp_nonce_field che sarà incluso nel nostro modulo come campo nascosto:
wp_nonce_field ('suq_form_create_quote', 'suq_form_create_quote_submitted');
Poiché ora è un campo nascosto nel nostro modulo, tornerà da noi quando il modulo verrà inviato. Possiamo quindi verificare che il nonce sia valido usando wp_verify_nonce:
wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote')))
Ciò restituirà vero se il nonce verifica.
Questa è la funzione chiamata dal nostro shortcode. Visualizza ed elabora il modulo di invio preventivo e il modulo di quotazione / cancellazione preventivo. Lo prenderemo in pezzi di dimensioni ridotte e nel passaggio 5 esamineremo le funzioni di supporto.
function suq_form_shortcode () if (! is_user_logged_in ()) return 'Devi essere registrato per pubblicare un preventivo.
'; global $ current_user;
if (isset ($ _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']); if ($ suq_quote_author! = "&& $ suq_quote_text! =") $ quote_data = array ('post_title' => $ suq_quote_author, 'post_content' => $ suq_quote_text, 'post_status' => 'in sospeso', 'post_autore' => $ current_user-> ID, 'post_type' => 'quotes'); if ($ quote_id = wp_insert_post ($ quote_set)) wp_set_object_terms ($ quote_id, (int) $ _ POST ['suq_quote_category'], 'quote_categoria'); eco 'Quota creata e in attesa di moderazione!
'; else // autore o campo di testo è vuoto echo 'Quota NON salvata! Chi l'ha detto? e la quotazione non deve essere vuota.
';
if (isset ($ _POST ['suq_form_delete_submitted']) && wp_verify_nonce ($ _ POST ['suq_form_delete_submitted'], 'suq_form_delete')) if (isset ($ _ POST ['suq_delete_id'])) if ($ quotes_deleted = suq_delete_quotes ( $ _POST ['suq_delete_id'])) echo ''. $ quotes_deleted. 'citazione (s) cancellata!
';
echo suq_get_create_quote_form ($ suq_quote_author, $ suq_quote_text, $ suq_quote_category); if ($ quotes_table = suq_get_user_quotes ($ current_user-> ID)) echo $ quotes_table;
Qui vedremo le funzioni che generano i moduli e la funzione che elimina le virgolette selezionate.
function suq_get_create_quote_form ($ suq_quote_author = ", $ suq_quote_text =", $ suq_quote_category = 0) $ out. = ''; restituire $ out;
function suq_get_quote_categories_dropdown ($ taxonomy, $ selected) return wp_dropdown_categories (array ('taxonomy' => $ taxonomy, 'name' => 'suq_quote_category', 'selected' => $ selected, 'hide_empty' => 0, 'echo' => 0));
function suq_get_user_quotes ($ user_id) $ args = array ('author' => $ user_id, 'post_type' => 'quotes', 'post_status' => 'in sospeso'); $ posts = new WP_Query ($ args); se (! $ posts-> post_count) restituisce 0; $ out. = ''; restituire $ out;Le tue citazioni non pubblicate
'; $ out. = '
I moduli possono essere manipolati nel browser per postare dati imprevisti. Nel nostro caso, a ogni casella di spunta viene assegnato il valore di un post. Ma cosa succede se un utente malintenzionato ha alterato quel valore e ha causato la nostra funzione di eliminazione per rimuovere un post che non era effettivamente elencato?
Un modo per evitarlo, è usare nonce per ogni riga di dati del post, assicurandosi che i nonces siano nominati univocamente con il valore del post da eliminare. Verifichiamo quindi la nonce al momento dell'invio del modulo per assicurarci che sia un vero valore di ritorno.
function suq_delete_quotes ($ quotes_to_delete) $ quotes_deleted = 0; foreach ($ quotes_to_delete come $ quote) if (isset ($ _ POST ['suq_post_delete_id_'. $ quote]) && wp_verify_nonce ($ _ POST ['suq_post_delete_id_'. $ quote], 'suq_post_delete_'. $ quota)) wp_trash_post ($ citazione); $ quotes_deleted ++; return $ quotes_deleted;
Basta rilasciare queste informazioni di stile nel file style.css nella cartella del tema:
#suq_quote_author width: 300px; #suq_quote_text width: 400px; altezza: 100px; #quotes font-size: 12px; #quotes th text-align: left;
Attiva il plugin, inserisci lo shortcode in una pagina, accedi al tuo sito e testalo.
La sorgente completa del codice del plugin e un link al sito demo sono elencati all'inizio di questo tutorial.
La cartella di origine contiene anche un modello di pagina Wordpress con un ciclo personalizzato che mostra le quotazioni pubblicate per tutti gli utenti.