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.

Opzioni API

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.

Pagina delle opzioni del plugin

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 () .

Impostazioni API

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

etichetta:

La funzione settings_fields si occupa dei campi nascosti obbligatori per il funzionamento del meccanismo delle opzioni nativo di WordPress. Le did_settings_sections in realtà emettono sezioni e campi precedentemente registrati.

Considerazioni sulla sicurezza

La regola di sicurezza fondamentale quando si gestiscono le opzioni è molto semplice: pulire l'input, evitare l'output e occuparsi delle funzionalità. In altre parole, se accetti l'input da un utente, devi verificare che il suo formato sia corretto e non includa contenuti dannosi (che è la convalida), dopodiché puoi passare i dati per un'ulteriore elaborazione. Quando si visualizzano i dati estratti dal database, è necessario eseguire l'escape per generare correttamente caratteri speciali (in particolare HTML). Per entrambe le attività WordPress offre funzioni native che possono essere utilizzate in diversi contesti (leggi di più sull'argomento Qui ).

Un altro punto di preoccupazione sono le autorizzazioni degli utenti. WordPress ha un meccanismo integrato che controlla i ruoli e le capacità degli utenti che blocca l'accesso a determinate aree di amministrazione per gli utenti con permessi insufficienti. Solo gli amministratori sono ammessi ovunque. Quando si creano le pagine delle opzioni, è necessario assegnare loro le capacità corrette (normalmente si tratta di 'manage_options') e non consentire agli utenti con privilegi limitati di accedere alla pagina (per ulteriori informazioni sui ruoli e le funzionalità di WordPress fare riferimento al Codice ).

Metti tutto a lavoro

Vediamo l'intero scenario in azione.

Continueremo a sviluppare il nostro esempio "Hello World" (iniziato nelle parti precedenti della serie) che visualizza le informazioni dell'autore ospite sotto un post con l'aiuto della tassonomia personalizzata.

Il codice del blocco dell'autore era precedentemente codificato nel plugin. Ora daremo all'utente la possibilità di specificare un modello per quel markup usando segnaposto per dati specifici dell'autore (nome, url e descrizione). Il nostro plugin ha già due file PHP inclusi: core.php (contenente il codice principale) e admin.php (contenente codice relativo all'amministratore).

Quali cambiamenti dobbiamo fare?

1. Crea una pagina di opzioni del plugin (in admin.php)

/* register menu item */function msp_helloworld_admin_menu_setup(){add_submenu_page('options-general.php','Helloworld Settings','Helloworld','manage_options','msp_helloworld','msp_helloworld_admin_page_screen');}add_action('admin_menu', 'msp_helloworld_admin_menu_setup'); //menu setup/* display page content */function msp_helloworld_admin_page_screen() {global $submenu;// access page settings$page_data = array();foreach($submenu['options-general.php'] as $i => $menu_item) {if($submenu['options-general.php'][$i][2] == 'msp_helloworld')$page_data = $submenu['options-general.php'][$i];}// output?>

'; return $ actions;} add_filter (' plugin_action_links ',' msp_helloworld_settings_link ', 2, 2);

In questo frammento msp_helloworld_admin_menu_setup crea una sottopagina nel menu 'Impostazioni' (dovrebbe essere eseguita sul hook di azione 'admin_menu' per funzionare correttamente). Quindi pubblichiamo il modulo delle impostazioni con msp_helloworld_admin_page_screen. Utilizza le funzioni API delle impostazioni per i campi e le funzioni WordPress predefinite per altri elementi dell'interfaccia (come il pulsante di invio). Notare l'attributo action di

tag: dovrebbe puntare a "options.php" per elaborare correttamente le opzioni. Infine, il filtro msp_helloworld_settings_link crea un collegamento alla pagina delle opzioni nella schermata di gestione dei plugin.

2. Registrare le opzioni del plugin con il sistema e creare campi e regole per loro

/* 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.

3. Modifica la funzione che emette la casella dell'autore (in core.php)

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.

Conclusione

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