Suggerimenti per le migliori pratiche nello sviluppo di WordPress

In questa serie, copriremo le cose più importanti da tenere in considerazione nello sviluppo di un plugin WordPress o di un tema WordPress. 

Questa guida mira a fornire una serie di buone pratiche che saranno utili ai principianti e anche agli sviluppatori esperti che stanno iniziando a lavorare con WordPress

Ma aspetta! Se hai sviluppato plugin WordPress per un po 'dai un'occhiata prima di decidere che questa guida non fa per te. Sono sicuro che otterrai qualcosa di esso. Dopotutto, abbiamo tutti qualcosa di unico da offrire.

La maggior parte delle spiegazioni di questa serie esiste già nel Codex, ma so che contiene così tante informazioni, può essere difficile sapere da dove cominciare.

Oggi trattiamo i seguenti argomenti:

  1. Gli standard di codifica di WordPress
  2. Evitare collisioni con nomi di funzioni
  3. Codice Commenti
  4. Suggerimenti per la sicurezza

La serie si propone di essere il più chiaro possibile e includerà sia esempi di buone che di basi per dare un senso a come certe cose dovrebbero lavoro quando si scrive codice specifico per WordPress.

Nota che non tutto è obbligatorio per scrivere un plugin; tuttavia, se hai appena iniziato, quando non iniziare con il piede giusto?

Proverò a rendere queste serie facili da leggere. Includerò alcuni esempi di codice buono e cattivo. Non tutto ciò che viene spiegato qui è obbligatorio per scrivere un plugin, ma se si inizia con lo sviluppo di Wordpress, perché non iniziare nel modo giusto? Una volta che diventa un'abitudine sarà difficile sbagliarla.

Standard di codifica WordPress

Personalmente parlando, questo è uno dei miei più grandi difetti quando sviluppo i plugin. Se sviluppi strumenti per WordPress, devi semplicemente seguire gli standard di codifica di WordPress. Gli standard di codifica aiutano a migliorare la leggibilità del codiceeaiuta ad evitare errori di codifica comuni. 

WordPress è un CMS collaborativo e una cosa così semplice come chiunque stia scrivendo codice allo stesso modo che rende la lettura, la scrittura e la gestione del codice più facile per tutti. All'inizio, potrebbe essere difficile cambiare lo stile di codifica con cui sei abituato a lavorare, ma alla fine scoprirai che diventerà una seconda natura e il tuo codice sarà più pulito e molto più facile da leggere.

Nel Manuale WordPress gli standard sono suddivisi nelle quattro principali lingue utilizzate

  1. Standard di codifica CSS
  2. Standard di codifica HTML
  3. Standard di codifica JavaScript
  4. Standard di codifica PHP

Esempi

Di seguito vi mostrerò alcuni semplici esempi di stili di parentesi PHP, in modo da poter avere un'idea.

Cattivi esempi

if (condition) action0 ($ var); if (condizione) action1 ();  elseif (condition2) action2a (); action2b (); 

Buoni esempi

if (condition) action0 ($ var);  if (condition) action1 ();  elseif (condition2) action2a (); action2b (); 

Il secondo esempio è molto più facile da leggere, vero? Il manuale sugli standard di codifica è ricco di esempi che ti aiuteranno a rendere il tuo codice più pulito. È facile rimanere stupiti di come qualcosa di semplice come pochi spazi e schede possa migliorare la leggibilità del codice.

Durante la stesura di questo articolo, ho acquistato un tema per un cliente e quando sono andato a modificare un codice sono rimasto scioccato da quanto fosse difficile farlo. 

Ecco cosa intendo:

 
>
"title =""> ';?> '; foreach ($ categorie come $ tag) $ tag_link = get_category_link ($ tag-> term_id); $ titleColor = categorys_title_color ($ tag-> term_id, "category", false); echo ''. $ tag-> nome. ''; eco "";?>

Un po 'paura, giusto? Dopo alcuni minuti di lavoro con questo codice, ho inviato una e-mail all'autore con un link al libro degli standard di codifica.

Evitare collisioni con nomi di funzioni

Le collisioni di nome si verificano quando una funzione ha lo stesso nome di una funzione che è già stata definita. Ad esempio, se nel tema hai una funzione chiamata get_the_post_terms () e tu installi un plugin che ha una funzione con lo stesso nome, otterrai qualcosa del tipo:

Errore irreversibile: impossibile redeclare get_the_post_terms () (precedentemente dichiarato in ... 

Sfortunatamente, accadono molto più frequentemente di quanto dovrebbero. Il fatto è che è facile da evitare.

Per evitare questo abbiamo opzioni:

1. Prefissa le tue funzioni

Ad esempio, se il nome del tuo plug-in è "WordPress Cool Plugin", puoi usare a wcc_ prefisso in tutte le tue funzioni. 

Quindi nell'esempio sopra il nostro nome di funzione sarà wcc_get_the_post_terms ()

Ti consiglio anche di aggiungere il prefisso al CSS, o almeno di renderlo più unico per evitare di modificare altri stili di plugin

2. Avvolgi le tue funzioni all'interno di una classe

Forse il tuo plugin è così semplice che non ha bisogno di una classe, ma puoi ancora crearne uno per mantenere le cose organizzate. In particolare mi piace utilizzare il pattern Singleton ma controllare l'esempio di seguito per una classe semplice con un metodo statico.

classe Wcc_Mailer invio funzione statica ($ post_ID) $ friends = '[email protected]'; posta ($ amici, "Nuovo post!", "Controlla il mio nuovo post in". get_permalink ($ post_ID)); restituire $ post_ID;  add_action ('publish_post', array ('Wcc_Mailer', 'send'));

Come puoi vedere su questo esempio ho solo prefisso il mio nome di classe, ma la mia funzione è semplice chiamata "invia". Questo nome di metodo è ora protetto dallo spazio dei nomi globale e non può essere chiamato direttamente. Per chiamarlo dovrò fare questo:

Wcc_Mailer :: send ($ post_id);

Codice di commento

I commenti del codice sono i migliori amici dello sviluppatore. Potresti trovare inutile commentare ogni singola funzione o variabile che crei, ma credimi, quando il tuo codice cresce, specialmente se riceve contributi da altri, può diventare difficile sapere esattamente cosa fare.

Inoltre, come ho detto prima, WordPress è un CMS collaborativo. Molti sviluppatori cercheranno il tuo codice e con un po 'di aiuto andranno nella giusta direzione.

Uso personalmente la sintassi PHPDoc per commentare le mie funzioni e con Sublime + Docblockr è davvero facile farlo. 

Vediamo come commentano i ragazzi di Wordpress wp_mail () funzione situata in wp-includes / pluggable.php

/ ** * Invia posta, simile alla posta di PHP * * Un vero valore di ritorno non significa automaticamente che l'utente abbia ricevuto l'email * con successo. Significa solo che il metodo utilizzato è stato in grado di * elaborare la richiesta senza errori. * * Usando i due hook 'wp_mail_from' e 'wp_mail_from_name' permetti * di creare un indirizzo come 'Nome 'quando entrambi sono impostati. Se * è impostato solo 'wp_mail_from', verrà utilizzato solo l'indirizzo e-mail senza nome *. * * Il tipo di contenuto predefinito è 'text / plain' che non consente l'utilizzo di HTML. * Tuttavia, puoi impostare il tipo di contenuto dell'email utilizzando il filtro * 'wp_mail_content_type'. * * Il set di caratteri predefinito si basa sul set di caratteri utilizzato sul blog. Il set di caratteri può * essere impostato usando il filtro "wp_mail_charset". * * @since 1.2.1 * * @use PHPMailer * * @param stringa | array $ per Array o elenco separato da virgole di indirizzi e-mail per inviare un messaggio. * @param stringa $ oggetto Oggetto email * @param stringa $ messaggio Contenuto del messaggio * @param stringa | array $ intestazioni Opzionale. Intestazioni aggiuntive * @param string | array $ allegati Opzionali. File da allegare. * @return bool Indica se il contenuto dell'email è stato inviato correttamente. * / function wp_mail ($ to, $ subject, $ message, $ headers = ", $ attachments = array ()) [...] // Send! try return $ phpmailer-> Send (); catch (phpmailerException $ e) return false;

Come puoi vedere, descrivono cosa fa la funzione, quali parametri sono necessari e cosa restituirà. 

Abbastanza auto-esplicativo, giusto?

I commenti non sono pensati per essere usati solo con PHP. In HTML, ad esempio, mi piace usare alla fine di grandi blocchi di codice in modo da non perdersi così facilmente.

Per i CSS, uso i commenti per dividere il mio codice in diverse sezioni. 

Per esempio :

/ ********************* STILI GENERALI ********************* / body font- famiglia: Arial; colore: # 333;  / ************************************************ ****************** H1, H2, H3, H4, H5 STYLES ********************** ******************************************** / h1, .h1  font-size: 2.5em; line-height: 1em; famiglia di caratteri: $ vag-bold;  / ********************* STILI DI NAVIGAZIONE ********************* / nav color : rosso [...]

Condividi i tuoi trucchi di commento con noi!

Suggerimenti per la sicurezza

La sicurezza deve essere presa molto seriamente! Se il plugin o il tema diventa popolare, credimi, non vuoi essere il colpevole di migliaia di siti compromessi. Se pensi che stia esagerando, dai uno sguardo alla ricerca di Checkmarx fatta nel 2013 sui 50 migliori plugin per WordPress.

Ora vediamo alcuni suggerimenti sulla sicurezza per lo sviluppo di WordPress:

Vulnerabilità XSS

Per prevenire XSS, dobbiamo fare due cose. Disinfetta l'input dei dati e disinfetta i dati di output. Abbiamo diversi metodi per disinfettare a seconda dei dati e del contesto utilizzato. Di norma non devi fidarti di alcun dato di input e non fidarti di alcun dato che verrà emesso.

Per i dati di input è possibile utilizzare per esempio sanitize_text_field () che controlla UTF-8 non valido, Converti singolo < characters to entity, strip all tags, remove line breaks, tabs and extra white space and strip octets. Depending on the context you are, there are different functions that will help you out sanitizing your data.

Lo stesso accade quando esporti i tuoi dati. Controlla il seguente esempio su come stampare un link:

"> 

esc_url rifiuta gli URL non validi, elimina i caratteri non validi e rimuove i personaggi pericolosi

esc_html codifica < > & "" durante l'emissione di HTML.

Ancora una volta, a seconda dei dati che hai, ci sono diverse funzioni per aiutarti. Per JavaScript che potresti usare ESC_JS.

Oltre all'igienizzazione, ricorda di convalidare anche la tua data.

Impedisci l'accesso diretto ai tuoi file

La maggior parte degli host consente l'accesso diretto ai file. Nel tuo plugin, questo significa che molto probabilmente si verificheranno alcuni errori PHP e questi errori sono informazioni preziose per gli aggressori. 

Un codice molto semplice per prevenire questo, che puoi posizionare sopra il tuo script è:

// Esci se vi si accede direttamente se (! Defined ('ABSPATH')) esce; 

Questo in pratica impedisce di eseguire lo script se non lo si accede tramite WordPress.

Rimuovi tutti gli avvisi e le avvertenze

Non solo gli errori PHP aiutano gli aggressori: le notifiche e gli avvertimenti includono anche molte informazioni preziose. Ogni plugin dovrebbe essere codificato utilizzando la modalità DEBUG. Questo aiuterà anche a catturare funzioni deprecate sul tuo plugin. Abilitare DEBUG modalità semplice cerca questa linea sul tuo wp-config.php e cambiarlo in VERO.

define (WP_DEBUG, true);

Insieme a questo, dovresti provare il fantastico plugin Debug Bar. Aggiungendo questa altra semplice linea, sarai anche in grado di analizzare tutte le query del database.

define ('SAVEQUERIES', true);

Utilizzare i valori di nonce

I valori nonce sono brevi per i numeri utilizzati una volta e utilizzati per proteggere da falsi di richieste tra siti, o CSRF, che, in altre parole, sono richieste inaspettate o duplicate che potrebbero causare modifiche permanenti o irreversibili indesiderate al sito Web e in particolare al suo Banca dati. Tutto ciò potrebbe essere eseguito da un utente malintenzionato o semplicemente da un semplice errore di un utente fidato.

A seconda di dove hai bisogno del nonce puoi crearlo in diversi modi:

Per usarlo su un link, usa wp_nonce_url ()

$ complete_url = wp_nonce_url ($ bare_url, 'trash-post', 'my_nonce');

Per usarlo su un modulo, utilizzare wp_nonce_field ()

wp_nonce_field ('trash-post', 'my_nonce');

Per usarlo su qualsiasi altro posto, usa wp_create_nonce ()

wp_localize_script ('my-script', 'my-var-name', array ('nonce' => wp_create_nonce ('trash-post', 'my_nonce'));

Se controlli il mio esempio sopra, vedrai come lo uso wp_localize_script (di cui parlerò nel prossimo articolo) per includere il mio nonce in un blocco di codice JavaScript. Lo faccio perché sto pensando di usare jQuery per fare una richiesta AJAX più tardi e dovresti sempre includere nonce sulle tue chiamate AJAX.

Quindi, nel tuo script per verificare semplicemente il nonce, inserisci il seguente codice

if (! wp_verify_nonce ('trash_post', 'my_nonce')) die ('Busted!'); 

Utilizzare le funzioni e le librerie di WordPress

Controlla sempre se tutto ciò che stai cercando di fare è possibile farlo con le funzioni e le librerie principali di WordPress. In questo modo, i tuoi script saranno meno vulnerabili alle vulnerabilità e se alcuni appariranno verranno riparati dai contributori principali di WordPress e non dovrai preoccuparti di contattare tutti i tuoi clienti.

L'esempio più famoso su questo è con la libreria TimThumb che, fino a qualche anno fa, era utilizzata da migliaia di plugin e temi. Un giorno, nel 2011 è stata divulgata la vulnerabilità. Da allora, ora possiamo usare il built-in add_image_size () funzione per questo scopo. 

Altre funzioni comuni sono racchiuse all'interno di funzioni di WordPress come arricciare che può essere facilmente sostituito da wp_remote_get e wp_remote_post che non solo codificherà i dati ma offrirà anche fallbacks, se arricciare non riesce.

Un altro esempio sarà l'uso di get_template_part () invece di usare il richiedere() o includere() Funzioni PHP. Sebbene siano fondamentalmente uguali, il primo sa già dove si trova il tema e cercherà il file richiesto nella directory di quel tema, non emetterà un avviso o un errore fatale se il file richiesto non esiste, può cercare altri file adatti, se non è stato trovato quello richiesto e conosce i temi figlio e i temi principali.

Il core di WordPress include molti script che possiamo usare nei nostri plugin o temi. Quindi dai sempre un'occhiata prima di aggiungere nuove librerie.

Qual'è il prossimo?

Spero che tu abbia ottenuto molto da questo particolare articolo. Come ho detto all'inizio, la maggior parte di queste informazioni esiste già sul Codex che dovrebbe essere la prima tappa ora che hai iniziato con la tua avventura di sviluppo WordPress.

Quando ho iniziato a sviluppare con WordPress alcuni anni fa, avrei voluto avere una guida come questa con tutte le informazioni insieme, quindi questa è la ragione principale per cui ho deciso di scrivere queste serie. 

Nel prossimo articolo spiegherò i seguenti argomenti:

  1. Il modo corretto per aggiungere JavaScript e fogli di stile nel tuo plugin
  2. Come usare Ajax in WordPress nel modo corretto
  3. Lascia che i tuoi utenti facciano cambiamenti con i ganci

Non esitare a lasciare i tuoi commenti o suggerimenti per i due articoli rimanenti su queste serie.