In questa serie, abbiamo creato un plug-in che ha lo scopo di fornire agli autori un modo per raccogliere, gestire e salvare idee e riferimenti ai contenuti che stanno creando all'interno di WordPress.
Nel frattempo, stiamo anche valutando i modi in cui possiamo organizzare il nostro plug-in in modo che il codice e l'organizzazione dei file siano chiari e manutenibili, in modo che il plugin continui lo sviluppo, siamo in grado di aggiungere, rimuovere e mantenere facilmente il suo Caratteristiche.
Fino a questo punto, abbiamo messo insieme l'organizzazione dei file di base del plug-in e del front-end, ma non abbiamo implementato alcuna funzionalità per salvare le informazioni nel database. E se non è possibile salvare le informazioni, il plugin non è di alcun beneficio per nessuno.
In questo post, ritorneremo sul codice lato server e inizieremo a implementare la funzionalità che:
Abbiamo tagliato il nostro lavoro per noi. In questo articolo, vedremo i primi due passaggi e nel prossimo post vedremo gli ultimi due passaggi.
Per verificare che l'utente abbia la possibilità di pubblicare per salvare i metadati dei post, è necessario implementare un controllo di sicurezza durante il processo di serializzazione. Per fare ciò, dobbiamo approfittare di un valore nonce.
Un nonce è un "numero usato una volta" per proteggere URL e moduli dall'uso improprio.
Per introdurne uno nella nostra meta-scatola, possiamo implementare la funzionalità nel markup responsabile del rendering del modello di post. Per fare questo, caricare admin / views / autori-commento-navigation.php
e aggiorna il modello in modo che includa una chiamata a wp_nonce_field
:
Bozza di risorse pubblicate
Nel codice sopra, abbiamo introdotto un nonce che corrisponde all'azione di salvare il commento dell'autore (che abbiamo chiamato authors_commentary_nonce
) e associato a un valore identificato da authors_commentary
.
Vedremo dove questo entrerà in gioco momentaneamente. Per ora, se carichi il tuo browser, non vedrai nulla di nuovo display. Questo perché i valori nonce sono visualizzati in un campo nascosto.
Per coloro che sono curiosi, puoi lanciare gli strumenti di sviluppo del tuo browser preferito, ispezionare la meta-box e dovresti trovare qualcosa di simile nel markup:
Certo, il valore
del tuo nonce sarà diverso.
Per assicurarci che l'utente abbia il permesso di salvare il post, vogliamo verificare tre cose:
Scriveremo due funzioni di supporto per ottenere il primo e il terzo, e useremo alcune funzioni integrate per controllare il numero due (che verrà effettivamente utilizzato nella seconda funzione di supporto).
Innanzitutto, andiamo avanti e impostiamo il hook e la funzione che verrà utilizzata per sfruttare le funzioni di supporto e salvare i metadati. Nel costruttore per Authors_Commentary_Meta_Box
, aggiungi la seguente riga di codice:
Quindi, definiamo la funzione. Si noti che sto effettuando chiamate a due funzioni nel seguente blocco di codice. Li definiremo per un momento:
is_valid_post_type () || ! $ this-> user_can_save ($ post_id, 'authors_commentary_nonce', 'authors_commentary_save')) return;
Dato il codice sopra, stiamo dicendo a WordPress di licenziare il nostro save_post
funzione ogni volta che è save_post
l'azione è chiamata. All'interno della funzione, stiamo dicendo "Se il post che viene salvato non è un tipo di post" post ", o se l'utente non ha il permesso di salvare, quindi esci dalla funzione."
Ovviamente, dobbiamo definire le funzioni in modo che la logica funzioni. Innanzitutto, scriveremo il is_valid_post_type
funzione come a privato
funzione della classe corrente. Controllerà il $ _POST
array per garantire che il tipo di post che viene salvato sia, in effetti, un post.
Successivamente, aggiungeremo il
user_can_save
funzione. Questa è la funzione che assicurerà che il post non venga salvato da WordPress e che se un utente sta salvando la funzione, il valore nonce associato all'azione post è impostato correttamente.Si noti qui che stiamo passando nel
nonce_action
e ilnonce_id
che abbiamo definito nel modello nel primo passaggio. Stiamo anche usandowp_verify_nonce
in congiunzione con dette informazioni.In questo modo possiamo verificare che il post che viene salvato sia fatto da un utente che dispone dell'accesso e delle autorizzazioni corretti.
Disinfetta i dati
Supponendo che l'utente stia lavorando con un tipo di post standard e che abbia i permessi per salvare le informazioni, dobbiamo disinfettare i dati.
Per fare questo, dobbiamo fare questo seguendo:
- Assicurati che nessuna delle informazioni nei metadati del post sia vuota
- Spogliamo tutto ciò che potrebbe essere pericoloso da scrivere nel database
Dopo averlo fatto, cercheremo di salvare le informazioni per ciascuna delle meta-box. Ma prima, lavoriamo sull'igienizzazione. Ci sono un paio di modi in cui possiamo andare a implementare questo. Ai fini di questo post, lo faremo nel modo più semplice possibile: controlleremo l'esistenza delle informazioni in base alla sua chiave, quindi, se esiste, la disinfettiamo.
Per i programmatori esperti, probabilmente noterai alcuni odori di codice con il codice che stiamo per scrivere. Più avanti in questa serie, faremo alcuni refactoring per vedere come possiamo rendere il plugin più manutenibile, quindi è tutto parte dell'intenzione di questo particolare post.
Detto ciò, torna indietro nel
save_post
funzione.1. Bozze
Poiché la prima scheda che esiste all'interno della meta-box è il bozze scheda, inizieremo con esso. Si noti che è un
textarea
, quindi la logica che esiste per sanare quell'informazione dovrebbe essere la seguente:
Ricordiamo che il textarea
è chiamato autori-Commento-correnti d'aria
in modo che possiamo accedervi all'interno di $ _POST
array. Per raggiungere questo obiettivo, utilizzeremo il seguente codice:
In poche parole, stiamo controllando per vedere se le informazioni nel
$ _POST
la matrice è vuota. In caso contrario, disinfetteremo i dati.2. Risorse
Questo particolare campo è un po 'più formale perché è dinamico. Cioè, l'utente può avere qualsiasi cosa, dai campi di input zero-to-many che tutti abbiamo bisogno di gestire. Ricorda che questa particolare scheda è progettata principalmente per gli URL, quindi dobbiamo assicurarci di disinfettare in modo sicuro le informazioni in questo modo.
Innanzitutto, dobbiamo apportare una piccola modifica al
createInputElement
funzione che esiste all'interno deladmin / attività / js / resources.js
file. Nello specifico, dobbiamo assicurarci che l'attributo name stia usando una matrice in modo che possiamo accedere correttamente e scorrere attraverso di essa quando si guarda$ _POST
dati.Assicurati che le righe di codice responsabili della creazione dell'elemento reale siano come questa:
// Successivamente, crea l'elemento di input effettivo e quindi restituiscilo al chiamante $ inputElement = $ ('') .attr (' type ',' text ') .attr (' name ',' authors-commentary-resources ['+ iInputCount +'] ') .attr (' id ',' authors-commentary-resource- ' + iInputCount) .attr ('value', ");Si noti che la chiave di ciò che abbiamo fatto si trova nella riga che aggiorna il
nome
. Nello specifico, stiamo inserendo il numero di input in indici dell'indice.Quindi, torna indietro nel
save_post
funzione e aggiungi il seguente codice (di cui parleremo dopo il blocco):Poiché stiamo lavorando con una serie di input, dobbiamo prima verificare che l'array non sia vuoto. Se non lo è, allora abbiamo bisogno di iterarlo perché non siamo sicuri di quanti ingressi dovremo gestire.
Simile al blocco precedente, stiamo facendo un livello base di disinfezione e fuga. Questo è qualcosa che puoi rendere aggressivo o rilassato come vorresti. Torneremo su questo condizionale nel prossimo post quando è il momento di salvare i dati.
3. Pubblicato
Questa scheda è simile alle schede precedenti in quanto abbiamo a che fare con un numero indeterminato di elementi che dobbiamo disinfettare. Questo significa che avremo bisogno di fare un piccolo aggiornamento al responsabile parziale del rendering di questo input.
Sul lato positivo, abbiamo a che fare solo con una casella di controllo che ha un valore booleano di essere controllata o meno (o, in particolare, "on" o vuota), quindi sanificare le informazioni è davvero facile.
Innanzitutto, aggiorniamo il parziale. Individuare
admin / views / parziali / published.php
. Successivamente, trova la linea che definisce ilingresso
checkbox e cambialo in modo che assomigli a questo:Si noti che abbiamo cambiato il
nome
attributo in modo che utilizzi un array con un indice come valore. Quindi, torneremo nelsave_post
funzione ancora una volta per introdurre la convalida su questo particolare elemento:Proprio come abbiamo fatto con i dati precedenti, per prima cosa controlliamo se il contenuto esiste. Se è così, allora lo disinfettiamo per prepararlo per il salvataggio. Se no, allora non facciamo nulla.
Al salvataggio
A questo punto, siamo posizionati per affrontare gli ultimi due punti della serie:
- Salvataggio e recupero
- refactoring
A partire dal prossimo post, rivisiteremo il codice che abbiamo scritto in questo post per vedere come possiamo salvarlo nel database e recuperarlo dal database per visualizzarlo sul front-end.
Successivamente, passeremo al refactoring. Dopotutto, parte della scrittura del codice gestibile sta facendo in modo che sia ben organizzata e facilmente modificabile. Dal momento che il codice con cui lavoriamo quotidianamente è già stato scritto e potrebbe essere sottoposto a refactoring, vedremo come farlo entro la fine della serie.
Nel frattempo, rivedi il codice sopra, controlla la fonte da GitHub e lascia qualsiasi domanda e commento nel campo sottostante.