Non c'è bisogno di chiedere perché qualcuno vorrebbe scrivere un plugin per WordPress. È una delle caratteristiche principali che rende WordPress così flessibile e adatto a una vasta gamma di progetti. In la prima parte della nostra serie abbiamo creato la base per un plugin per WordPress riconoscibile dal core. Quindi, in la seconda parte abbiamo imparato come modificare la funzionalità di default del core. Oggi esamineremo le opzioni del plugin. Questa è una delle attività più comuni che i plug-in devono eseguire.
Comunemente è necessario creare un set di parametri (opzioni) e dare all'utente la possibilità di assegnare loro valori appropriati. I valori sono memorizzati nel database e possono essere recuperati su richiesta. Il plugin normalmente eseguirà diverse azioni in base a questi valori, producendo output diversi, ad esempio.
Quali strumenti ci offre WordPress per rendere possibile questo scenario? Ci consente di registrare le opzioni con il sistema e recuperarle per ID assegnato. L'API delle opzioni è responsabile di ciò. WordPress fornisce anche un'API Settings per creare una GUI di amministrazione per i dialoghi delle opzioni. Oltre a ciò, ci consente di aggiungere elementi personalizzati nel menu di amministrazione in modo che il plug-in possa avere una propria pagina delle impostazioni. Infine, WordPress si prende cura della sicurezza dei plugin e fornisce un insieme di funzionalità e metodi di pulizia per gestire l'input dell'utente in modo sicuro.
Diamo un'occhiata dettagliata a ciascuna parte.
Il Opzioni API è un modo standardizzato di memorizzare dati personalizzati nel database. Tutti i dati vengono salvati nella tabella wp_options con un nome personalizzato e sono accessibili da qualche parte nel codice. Le funzioni più importanti dell'API sono:
La funzione get_option estrae semplicemente dal database qualsiasi informazione memorizzata sotto un determinato nome e la restituisce. La funzione update_option accetta un nome opzione e il suo valore e aggiorna la voce corrispondente nel database. Se non esiste tale voce, verrà creata automaticamente. Entrambe le funzioni possono operare con array e singoli valori. Ciò significa che puoi archiviare i dati dell'array con un singolo nome nel database e l'API gestirà le azioni di serializzazione e mineralizzazione per te. Questa è una pratica consigliata per i plugin: memorizza tutte le opzioni di plugin sotto forma di array con un solo nome.
Puoi creare una pagina delle impostazioni o un gruppo di pagine per il tuo plugin nel menu di amministrazione. Se stai creando un gruppo di pagine devi prima aggiungere una pagina di primo livello:
I valori dei parametri sono auto-esplicativi ma è possibile fare riferimento a fonte per dettagli. Ora devi aggiungere pagine interne una alla volta nel modo seguente:
Come parametro $ parent_slug devi usare l'ID della pagina di primo livello - nel caso di una pagina personalizzata di livello superiore è il valore che hai fornito come $ menu_slug al momento della registrazione. Se non hai bisogno di più pagine puoi creare una singola pagina delle impostazioni sotto una delle sezioni esistenti di livello superiore - comunemente sotto "Impostazioni" (options-general.php dovrebbe essere usato come $ parent_slug). In alternativa ci sono le funzioni di collegamento per l'aggiunta di sottopagine sotto determinate voci del menu di amministrazione, nel caso di "Impostazioni" è add_options_page () .
Il Impostazioni API ti permette di creare un'interfaccia per gestire le impostazioni del plugin; contrassegnare una pagina come pagina delle impostazioni (per elaborare l'input automaticamente) e le sezioni di output su quella pagina e i campi all'interno di ogni sezione per accettare l'input dell'utente. Per raggiungere questo obiettivo, il primo obiettivo è registrare le impostazioni con il sistema e creare la struttura dei campi sezione per loro:
Fare riferimento a Codice per una descrizione dettagliata dei parametri, ma la logica è abbastanza semplice: prima di tutto, registriamo il nome delle nostre opzioni (se ci sono molte opzioni, potrebbero essere organizzate in gruppi); quindi registriamo la sezione (s) con un ID interno e set di campi per ogni sezione; l'API ci consente di specificare i callback personalizzati per la convalida dell'input e la visualizzazione di ogni campo e sezione.
Dopo aver registrato le nostre opzioni e i campi corrispondenti, dobbiamo visualizzarli nella pagina delle impostazioni - le seguenti funzioni devono essere richiamate all'interno di
/* register settings */function msp_helloworld_settings_init(){register_setting('msp_helloworld_options','msp_helloworld_options','msp_helloworld_options_validate');add_settings_section('msp_helloworld_authorbox','Author's box','msp_helloworld_authorbox_desc','msp_helloworld');add_settings_field('msp_helloworld_authorbox_template','Template','msp_helloworld_authorbox_field','msp_helloworld','msp_helloworld_authorbox');}add_action('admin_init', 'msp_helloworld_settings_init');/* validate input */function msp_helloworld_options_validate($input){global $allowedposttags, $allowedrichhtml;if(isset($input['authorbox_template']))$input['authorbox_template'] = wp_kses_post($input['authorbox_template']);return $input;}/* description text */function msp_helloworld_authorbox_desc(){echo "Enter the template markup for author box using placeholders: [gauthor_name], [gauthor_url], [gauthor_desc] for name, URL and description of author correspondingly.
";}/* filed output */function msp_helloworld_authorbox_field() {$options = get_option('msp_helloworld_options');$authorbox = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$authorbox = esc_textarea($authorbox); //sanitise output?>
Dovrei sottolineare che tutte le opzioni di plugin dovrebbero essere archiviate come array. Nonostante il fatto che abbiamo solo un'opzione (authorbox_template), la includiamo in una matrice e il campo corrispondente nella sezione a scopo dimostrativo. La funzione di registrazione msp_helloworld_settings_init deve essere eseguita sull'hook "admin_init". La funzione msp_helloworld_options_validate si prende cura dell'input dell'utente pulendolo con il nativo wp_kses_post filtro che si basa sulla libreria KSES. La funzione msp_helloworld_authorbox_desc crea una descrizione per la sezione del modulo e msp_helloworld_authorbox_field genera una textarea per gestire il markup immesso. Si noti che assegniamo le classi CSS "codice di testo grande" ad esso in modo che venga applicato lo stile di amministrazione incorporato.
Tutto ciò produce la seguente schermata nel pannello di amministrazione di WordPress.
Lo facciamo in modo che recuperi il modello dal database e sostituisca i dati segnaposto ([nome_gotore], [gauthor_url], [gauthor_desc]) con i valori corrispondenti.
/* Create author's box markup */function msp_helloworld_author_block(){global $post;$author_terms = wp_get_object_terms($post->ID, 'gauthor');if(empty($author_terms))return;$name = stripslashes($author_terms[0]->name);$url = esc_url(get_term_link($author_terms[0]));$desc = wp_filter_post_kses($author_terms[0]->description);//get template from option$options = get_option('msp_helloworld_options');$out = (isset($options['authorbox_template'])) ? $options['authorbox_template'] : '';$out = str_replace(array('[gauthor_url]', '[gauthor_name]', '[gauthor_desc]'),array($url, $name, $desc),$out);return $out;}
Infine, il nostro plugin (dopo aver applicato alcuni stili) produce una bella scatola dell'autore ospite sotto il contenuto del post.
Memorizzare e accedere ai dati delle opzioni è un compito molto comune, che molti plug-in devono eseguire. Attraverso il meccanismo delle opzioni è possibile fornire agli utenti la possibilità di adattare il plug-in alle proprie esigenze (che apprezzeranno sicuramente). Anche sviluppando per te potrebbe essere necessario un modo per memorizzare i dettagli di una particolare installazione. Affidarsi alle API e alle funzioni native di WordPress quando si risolvono tali compiti è un buon modo per creare codice mantenibile, sicuro e a prova di futuro.
Che tipo di plugin ti piacerebbe vedere disponibile per WordPress? Hai costruito il tuo utilizzando questa serie? Fateci sapere nei commenti qui sotto.
Usi dell'immagine in vetrina immagine del modulo via Shutterstock