Nell’intervento che ho tenuto il 12 Settembre 2017 al WordPress Milano Meetup, e nella presentazione mostrata ai partecipanti, sono stati omessi alcuni argomenti per ragioni di tempo. In ogni caso ho ritenuto utile, per chi fosse interessato, integrare la presentazione con alcuni approfondimenti relativi ad alcune tematiche, quali:
- Come ricavare la url assoluta di admin-ajax.php;
- Come scrivere un plugin;
- Come permettere al gestore di configurare l’oggetto e il messaggio della mail;
Come ricavare in modo dinamico la url dello script admin-ajax.php
Nella slide “L’invio dei dati con Ajax” viene messa in evidenza la url dello script a cui inviare le richieste Ajax destinate a WordPress.
Nella porzione di codice in cui viene chiamata jQuery.ajax(), la prorietà ‛url’, dell’oggetto da passare alla funzione, viene impostata in modo statico con la url completa di admin-ajax.php.
Tecnicamente funziona; tuttavia può essere utile ricavare questo dato in modo dinamico, ossia partendo dalla url dell’installazione corrente di WordPress, facendo un output di codice js che imposta una variabile globale con il valore che ci serve. Quindi se WordPress è installato su miosito.it la url sarà “miosito.it/wp-admin/admin-ajax.php”, su altrosito.it sarà “altrosito.it/wp-admin/admin-ajax.php”, ecc… .
In questa sezione vediamo come ottenere questo risultato in due modi:
- uno script funzionante in una pagina web singola;
- uno script allegato in tutte le pagine e un codice, da stampare subito prima, che inizializza una variabile globale con la url di admin-ajax.php.
Script in una singola pagina
Nel caso di un form per la registrazione di un utente è sicuramente la scelta privilegiata poiché è difficile, se non impossibile, avere questo elemento in tutte le pagine; pertanto gli script che gestiscono questa funzionalità saranno presenti solo nella pagina del form.
Prima dello script con la richiesta Ajax possiamo produrre un codice js utilizzando uno shortcode, molto utile quando dobbiamo elaborare un testo dinamico tramite php e le API di WordPress.
Così viene creato lo shortcode:
- add_shortcode(‘ajax-url’,’get_script_ajax_url’);, nel contenuto del post la stringa ‛[ajax-url]’ sarà sostituita da quella prodotta dalla funzione get_script_ajax_url();
- la funzione associata a questo shortcode restituirà un codice js che imposta la variabile ajax_url con una stringa prodotta da WordPress tramite admin_url(‛admin-ajax.php’), che a sua volta restituisce la url di ‛admin-ajax.php’, partendo da quella del sito corrente.
- A questo punto è possibile inserire il codice js della richiesta Ajax in due modi; facendolo restituire dallo shortcode appena creato oppure inserendolo nel post, racchiuso tra <script type=”text/javascript”>/*<!–*/ e /*–>*/</script>, dopo lo shortcode.
La funzione get_script_ajax_url()
function get_script_ajax_url(){ $script='<script type="text/javascript">'; $script.='var ajax_url="'.admin_url( 'admin-ajax.php' ).'";'; $script.='</script>'; return $script; }
Come scrivere un plugin
Creazione del file .php
Si crea un file .php e gli si assegna un nome con le lettere minuscole e senza spazi.
Scrivere le intestazioni sul file principale
Il plugin può essere composto da diversi script, ma solo uno è il principale, quello riconosciuto e analizzato da WordPress. Il codice del controller deve iniziare con un testo commentato, gli headers, da dove WordPress estrae una serie di informazioni che riporta nella pagina dei plugin.
<?php
/*
Plugin Name: Gestione utente
Description: Plugin personalizzato per la gestione degli utenti
Plugin URI: https://www.andrearonchetti.it
Version: 1.0
Author: Andrea Ronchetti
Author URI: https://www.andrearonchetti.it
*/
Le informazioni da inserire sono:
- Plugin name, il nome del plugin stampato in bold;
- Description, la descrizione visualizzata sotto il nome;
- Plugin URI, l’indirizzo del sito da cui scaricare il plugin;
- Version, la versione del plugin installato;
- Author, l’autore/la casa che ha prodotto il plugin;
- Author URI, il sito del produttore.
Creazione della cartella e inserimento del file all’interno
Tutti gli script devono stare in una cartella avente lo stesso nome del file principale, senza l’estensione .php, naturalmente. Creare tale cartella e inserirci tutti i file.
Compressione e caricamento del plugin
È sempre consigliabile caricare un plugin mediante la procedura prevista da WordPress. Tuttavia, occorre avere una versione zippata della cartella. Quindi comprimerla, caricare il file .zip dalla pagina “Aggiungi plugin”, cliccando su “Carica plugin”.
Attivazione del plugin
Una volta caricato il plugin il codice non è ancora esecutivo: è necessaria l’attivazione per questo, che avviene cliccando su “Attiva”, posto sotto il nome del plugin, nella pagina “Plugin”. In fase di attivazione, qualora il codice generasse errori, il plugin non viene attivato. Invece ad attivazione avvenuta il plugin è operativo e il codice verrà eseguito.
Come permettere al gestore di configurare l’oggetto e il messaggio della mail
Il testo della mail da inviare all’utente, per comunicargli l’avvenuta attivazione, può essere messo nel codice php. Piccolo particolare: in questo modo il gestore della palestra non può modificare a suo piacimento l’oggetto e il messaggio della mail.
Allo scopo di rendere possibile la personalizzazione si può creare una pagina, da tenere in bozza, in cui impostare l’oggetto della mail tramite il titolo e il messaggio tramite il contenuto del post. Inoltre nel messaggio è possibile decidere dove stampare il nome e il cognome dell’interessato, inserendo nel punto desiderato la stringa %%NAME%%.
Ecco il codice php per fare questo.
//$mail è un post tramite cui impostare oggetto e contenuto $mail=get_post(60); //l'oggetto è il titolo del post $subject=$mail->post_title; //il messaggio è il contenuto del post, nel quale sarà sostituita la stringa %%NAME%% con nome e cognome dell'utente $message=$mail->post_content; $message=str_replace('%%NAME%%',$user['first_name']." ".$user['last_name'],$message);
Tramite la funzione get_post(), a cui passiamo l’id della pagina che ci interessa, ricaviamo post_title, che consiste nel titolo della pagina, assegnato a $subject, e post_content, valore che restituisce il testo scritto nell’editor, con cui è valorizzata $message.
Su $message eseguiamo str_replace() per sostituire %%NAME%% con la stringa $nome.” “.$cognome.