I collegamenti occasionali possono essere utilizzati in una varietà di situazioni: per fornire un accesso temporaneo a un file o una pagina o per confermare la registrazione. In questo tutorial, ti mostreremo come generare e incorporare URL usa e getta.
Creazione di URL
Supponiamo di avere un sistema di autenticazione utente sul nostro sito. Dopo la registrazione, chiediamo all'utente di eseguire la procedura di verifica tramite posta elettronica. Per creare tali collegamenti, possiamo utilizzare il parametro token speciale. Un esempio di tale collegamento:
Http: //example.com/activate? Token \u003d ee97780 ...
Non possiamo fare a meno di un database qui, quindi diamo un'occhiata alla tabella con cui lavoreremo.
CREATE TABLE pending_users (token CHAR (40) NOT NULL, username VARCHAR (45) NOT NULL, tstamp INTEGER UNSIGNED NOT NULL, PRIMARY KEY (token));
Memorizzeremo 3 campi nella tabella: token, nome utente e ora. Per generare il token, useremo la funzione sha1 (), che restituisce una stringa di 40 caratteri. Il campo tstamp memorizzerà l'ora in cui il token è stato generato in modo da poter tenere traccia dei collegamenti scaduti.
Ci sono molti modi per generare un token, ma in questo tutorial useremo le funzioni uniqid () e sha1 (). Indipendentemente dal modo in cui viene generato il token, assicurati che i valori generati siano diversi e che la probabilità di duplicati sia minima.
$ token \u003d sha1 (uniqid ($ username, true));
La funzione uniqid () accetta una stringa come parametro e restituisce un identificatore univoco basato sull'argomento passato e l'ora corrente. Inoltre, come secondo argomento, questa funzione accetta un valore booleano, che segnalerà a uniqid di aggiungere alcuni caratteri extra per aumentare la probabilità che il valore sia unico. La funzione sha1 accetta un identificatore univoco e crea un hash.
Dopo che queste due funzioni avranno funzionato, avremo un token univoco che possiamo utilizzare per generare indirizzi URL. Ora dobbiamo aggiungerlo al database:
$ query \u003d $ db-\u003e prepare ("INSERT INTO pending_users (username, token, tstamp) VALUES (?,?,?)"); $ query-\u003e execute (array ($ username, $ token, $ _SERVER ["REQUEST_TIME"]));
Per farci sapere quale utente deve essere attivato, nella tabella verrà registrato anche il nome utente. In un esempio più su misura per un sito reale, puoi utilizzare un ID utente.
Ora che abbiamo tutte le informazioni di cui abbiamo bisogno, possiamo creare un URL temporaneo:
$ url \u003d "http://example.com/activate.php?token\u003d$token";
$ messaggio \u003d<< Ora abbiamo bisogno di uno script, grazie al quale effettueremo il controllo. Tutto quello che dobbiamo fare è confrontare il token dall'URL e il token dal database. Se ce n'è uno e la sua vita non è scaduta, allora va tutto bene. // ottieni il token if (isset ($ _ GET ["token"]) && preg_match ("/ ^ (40) $ / i", $ _GET ["token"])) ($ token \u003d $ _GET ["token"] ;) else (lancia una nuova eccezione ("il token non è valido.");) // controlla il token $ query \u003d $ db-\u003e prepare ("SELECT username, tstamp FROM pending_users WHERE token \u003d?"); $ query-\u003e execute (array ($ token)); $ riga \u003d $ query-\u003e fetch (PDO :: FETCH_ASSOC); $ query-\u003e closeCursor (); if ($ riga) (extract ($ riga);) else (lancia una nuova eccezione ("il token non è valido.");) // attiva l'account utente // ... // rimuove il token dal database $ query \u003d $ db- \u003e prepare ("DELETE FROM pending_users WHERE username \u003d? AND token \u003d? AND tstamp \u003d?",); $ query-\u003e execute (array ($ username, $ token, $ tstamp)); Dobbiamo inoltre provvedere alla verifica dei token la cui durata è scaduta: // 1 giorno in secondi \u003d 60 secondi * 60 minuti * 24 ore $ delta \u003d 86400; // controlla se ($ _SERVER ["REQUEST_TIME"] - $ tstamp\u003e $ delta) (lancia una nuova eccezione ("il token è scaduto.");) // attiva l'account utente // ... Quindi, avremo due controlli: uno per la validità del token, l'altro per la durata della sua esistenza. Questo metodo può essere utilizzato non solo per attivare gli account utente, ma anche per altre esigenze: ad esempio, per fornire un accesso una tantum o temporaneo ad alcune risorse o servizi. Inoltre, puoi creare uno script che rimuoverà i token che non hai mai usato. Questo script può essere eseguito da solo di tanto in tanto o puoi usare cron per questo. I temi di solito non sono funzionali, ma a volte noi sviluppatori abbiamo bisogno di implementare alcune funzionalità nel nostro tema per renderlo un po 'migliore e più facile da usare. In questo tutorial esploreremo il termine "territorio dei plugin" e impareremo anche come utilizzare un fantastico strumento scritto da Thomas Griffin: la libreria di attivazione dei plugin TGM. I temi hanno lo scopo di cambiare il design di un sito Web WordPress. Idealmente, l'argomento dovrebbe toccare solo l'aspetto visivo. Tuttavia, nella nostra epoca d'oro di WordPress, gli sviluppatori di plugin spesso includono funzionalità nei loro temi per mantenerli competitivi sul mercato. Questa è un'invasione del territorio dei plugin. Possiamo pensare al "territorio dei plugin" come a un pezzo di codice funzionale. Qualsiasi pezzo di codice che modifica la funzionalità del tuo sito dovrebbe essere fornito come plugin, a meno che il codice specificato non sia incorporato nel core di WordPress. Ho già formulato in precedenza in uno dei miei articoli la regola pratica per il territorio dei plugin: Se la funzionalità è correlata alla presentazione visiva del sito, dovrebbe essere inclusa nel tema; se è correlato alla funzionalità, dovrebbe essere presentato come plug-in separato. Una regola abbastanza semplice. Le persone cercano ancora di codificare snippet funzionali nei loro temi, ma le directory dei temi (come WordPress.org o ThemeForest) non accettano temi che invadono il territorio dei plugin. Quindi offrire funzionalità nei temi è diventata una sfida definitiva. Fortunatamente, esiste una soluzione semplice che non va contro la regola del territorio dei plugin. Notare la funzione tgmpa () con due parametri alla fine del codice. Il secondo parametro è la variabile $ config, che è anche un array come $ plugins. Come suggerisce il nome, è possibile personalizzare la libreria di attivazione del plug-in TGM utilizzando questo array. La variabile accetta anche il proprio set di opzioni: Come puoi vedere, è possibile offrire funzionalità nei temi WordPress: devi solo pensare prima agli utenti che potrebbero passare da un tema all'altro. La libreria di attivazione del plug-in TGM offre un modo davvero intelligente per farlo. Cosa ne pensate di questo strumento? L'hai mai usato, pensi di usarlo in futuro? Condividi i tuoi pensieri! Creiamo la nostra pagina di registrazione per il multisito invece dello standard wp-signup.php. In una tipica installazione di WordPress, la pagina di registrazione (autorizzazione, reimpostazione della password) mostra il file wp-login.php. Ci sono condizioni separate per il multisito in wp-login.php. Quindi, quando fai clic sul collegamento /wp-login.php?action\u003dregister su un sito multiplo, WordPress reindirizzerà alla pagina /wp-signup.php. In molti temi, la pagina non sembra molto attraente, quindi ne creeremo una nostra. Per impostazione predefinita, WordPress apre la pagina di registrazione (wp-signup.php) sul dominio principale (sito) della rete. Tuttavia, puoi creare una pagina di registrazione separata per ogni sito sulla rete, anche se hanno temi diversi. Considereremo il caso in cui tutti i siti sulla rete abbiano la propria pagina di registrazione, ma viene utilizzato lo stesso tema ei siti differiscono solo per la lingua. Se vengono utilizzati temi diversi, sarà necessario scrivere più codice. Non. Il nome di questo file sembra essere menzionato in ogni articolo di WordPress. Nel nostro caso, dato che la funzionalità di registrazione è pensata per più siti, ha senso spostarla nei plugin MU che vengono caricati all'apertura di qualsiasi sito. Vale la pena notare che i plug-in MU vengono caricati prima dei plug-in normali e prima che il core di WordPress sia completamente caricato, quindi chiamare alcune funzioni può portare a errori fatali in PHP. Anche questo caricamento "anticipato" ha i suoi vantaggi. Ad esempio, all'interno di qualsiasi tema, non puoi aggrapparti ad alcune azioni che vengono attivate anche prima che il file functions.php venga caricato dal tema. Un esempio di ciò sono le azioni del plugin Jetpack del modulo jetpack_module_loaded_related-posts (related-posts - il nome del modulo) con cui è possibile tracciare l'attività dei moduli in Jetpack. È impossibile "aggrapparsi" a questa azione dal file del tema, perché l'azione ha già funzionato prima del caricamento del tema - i plugin vengono caricati prima dei temi. Per un'immagine generale dell'ordine di caricamento di WordPress, vedere la pagina di riferimento dell'azione nel codice. I plugin MU possono contenere qualsiasi numero di file e qualsiasi struttura che ti sembra logica. Mi attengo a qualcosa di simile a questa gerarchia: | -mu-plugins | - | -load.php | - | - | -selena-network | - | - | - | -signup | - | - | - | - | -plugin.php | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | -plugin.php Tutti i "plugin" necessari per la nostra rete sono collegati nel file load.php: // Carica i traduttori per tutti i componenti aggiuntivi load_muplugin_textdomain ("selena_network", "/ selena-network / languages \u200b\u200b/"); // La registrazione alla rete richiede WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Un altro plugin // richiede WPMU_PLUGIN_DIR ... All'interno della cartella selena-network ci sono le cartelle dei plugin, ognuna ha il proprio plugin.php, che includiamo in load.php. Questo ti dà flessibilità e la possibilità di spegnere e riaccendere rapidamente le cose. Per specificare l'indirizzo della pagina di registrazione, viene utilizzato il filtro wp_signup_location. Può essere trovato all'interno del file wp-login.php ed è responsabile del reindirizzamento a wp-signup.php. Caso "register": if (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location", network_site_url ("wp-signup.php"))); exit; Aggiungiamo la nostra funzione a mu-plugins / selena-network / signup / plugin.php, che restituirà l'indirizzo della pagina di registrazione sul sito corrente: Funzione selena_network_signup_page ($ url) (return home_url (). "/ Registrati /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99); selena_network è il prefisso che uso nei nomi di tutte le funzioni all'interno dei plugin MU sul mio sito per evitare collisioni, dovrebbe essere sostituito con il mio prefisso univoco. Il filtro ha una priorità di 99 perché alcuni plugin come bbPress e BuddyPress potrebbero sovrascrivere questo URL con il proprio (i plugin MU vengono caricati prima dei plugin normali, vedi sopra). Nota che home_url () viene utilizzato al posto di network_site_url () per mantenere il visitatore nello stesso dominio. Qualsiasi URL può essere utilizzato come indirizzo. Ora creiamo una pagina con l'indirizzo site.com/signup/ tramite l'interfaccia normale e nella cartella del tema figlio, il modello per la nostra nuova pagina è page-signup.php. È possibile utilizzare un ID univoco al posto della parola "registrazione". All'interno del nuovo modello, è necessario chiamare la funzione selena_network_signup_main (), che visualizzerà il modulo di registrazione. Vale la pena notare che l'intero processo con i modelli non è richiesto e invece puoi creare il tuo shortcode, che chiamerà anche la funzione selena_network_signup_main (). Ora iniziamo a creare una funzione che visualizzerà il modulo di registrazione. Per fare ciò, copia i file wp-signup.php e wp-activation.php dalla radice di WordPress a mu-plugings / selena-network / signup / (e non dimenticare di collegarli all'interno di mu-plugins / selena-network / signup / plugin.php) ... Ulteriori manipolazioni con i file sono estremamente difficili e richiedono molto tempo da descrivere, quindi dovrai farle tu stesso. Descriverò solo cosa deve essere fatto esattamente e pubblicherò i file sorgente del mio progetto: All'interno di wp-activation.php, devi fare qualcosa di simile: Il file wp-activation.php è responsabile della pagina di attivazione dell'account. Come per la pagina di registrazione, è necessario creare un modello separato per essa, all'interno del quale chiamare la funzione dal file wp-activation.php. La pagina di registrazione invia al visitatore un'e-mail con un collegamento per attivare il proprio account. Per impostazione predefinita, questo viene fatto dalla funzione wpmu_signup_user_notification () dal file ms-functions.php. La sua funzionalità può essere presa in prestito per la tua funzione. Il motivo per smettere di usare questa funzione è perché invia il link di attivazione dell'account da wp-activation.php. Puoi "disabilitare" questa funzione usando il filtro wpmu_signup_user_notification, dando false su di esso (se non lo fai, la lettera di attivazione verrà inviata due volte, ok, infatti, due lettere diverse). Funzione armyofselenagomez_wpmu_signup_user_notification ($ user, $ user_email, $ key, $ meta \u003d array ()) (// ... // Codice dalla funzione wpmu_signup_user_notification () wp_mail ($ user_email, wp_specialchars_decode ($ message_headers), $ message), $ ; return false;) add_filter ("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4); Di conseguenza, la pagina di registrazione nel tema Selena sembra molto più pulita e accurata. Ci sono molti altri modi non molto corretti su Internet per fare lo stesso: reindirizzamenti Apache, moduli AJAX che non funzioneranno senza Java Script, ecc. Non mi è piaciuto molto tutto questo, quindi ho provato a farlo nel modo più corretto possibile sul mio proprio sito web. Nota che dovresti modificare i file con attenzione e cercare di non deviare molto dall'originale, in modo che in futuro, se WordPress cambia i file wp-signup.php e wp-activation.php, sarebbe più facile confrontarli per trovare le modifiche. Non dimenticare di esaminare il codice sorgente di tutte le funzioni sopra descritte per comprendere appieno cosa e come sta accadendo all'interno del codice. Anche i più piccoli siti WordPress sono soggetti a frequenti registrazioni di spam. Puoi scrivere infinite condizioni per filtrare i bot, spesso più come provare a creare intelligenza artificiale 🙂 Nel caso di un multisito, il solito reindirizzamento in Apache mi ha aiutato molto, con il quale, aprendo /wp-signup.php e /wp-acitvate.php, ho chiesto 404 (Non sono un esperto della configurazione di Apache, quindi le mie regole potrebbero non essere molto corrette). RewriteEngine su RewriteBase / RewriteRule ^ wp-signup \\ .php - RewriteRule ^ wp-activation \\ .php - # BEGIN WordPress # Non toccare le regole di WordPress per impostazione predefinita :) # ... # END WordPress P. S. Cerco di descrivere nel modo più dettagliato possibile alcune cose di terze parti, perché quando ho iniziato, a volte non c'era nessuno a suggerire e spiegare molte cose. Credo anche che questi piccoli suggerimenti su altri materiali spingano qualcuno a imparare qualcosa di nuovo e ad espandere il proprio campo di conoscenza. Le espressioni regolari sono utilizzate nelle voci RewriteRule, non sono affatto complesse, ad esempio, il carattere ^ indica l'inizio di una riga. Registra una funzione da attivare quando il plugin è attivato. Questa funzione collega la funzione di callback specificata all'hook activ_ (plugin) ed è un wrapper attorno a questo hook. (plugin) nell'hook activ_ (plugin) viene sostituito con il nome del relativo plugin al file principale del plugin. Ad esempio, se il plugin si trova: wp-content / plugins / sampleplugin / sample.php, il nome dell'hook sarà: activ_sampleplugin / sample.php. Dalla versione 3.1. L'hook si attiva solo quando il plug-in è attivato e non si attiva quando il plug-in viene aggiornato automaticamente. Il plugin viene attivato dalla funzione activ_plugin (), in cui viene attivato l'hook activ_ (plugin). La funzione activ_plugin () nel kernel viene chiamata dopo che l'ambiente VI è stato caricato. Questa funzione collega il file del plugin principale (e tutto ciò che è specificato in esso) e quindi attiva la funzione di callback specificata tramite un hook. Per questo motivo, tutte le funzioni e le classi del plugin sono disponibili nella nostra funzione di callback. Tuttavia, poiché tutti i principali hook WP sono già stati attivati \u200b\u200bquando viene caricato l'ambiente VI, nessun evento plugin appeso agli hook, ad esempio plugins_loaded, non si attiverà più quando il file plug-in principale è connesso. Ciò significa che il nostro plugin sarà connesso, ma non completamente: non come dovrebbe essere connesso quando è già attivato. Quindi, ad esempio, se un plugin fa qualcosa durante l'evento plugins_loaded, allora tutte queste azioni semplicemente non avverranno quando il plugin viene attivato. Ad esempio, se collega un file di traduzione, il file di traduzione non verrà connesso quando viene attivata la funzione di callback specificata per register_activation_hook (). Di norma, dopo che la funzione di callback è stata attivata, ci sono 2 eventi su cui le funzioni possono essere bloccate: activ_plugin e shutdown. Per fare qualcosa di straordinario quando si attiva un plugin, vedere l'esempio 5. La funzione non funzionerà se la chiami nel momento in cui viene attivato un hook, ad esempio plugins_loaded, init. La funzione deve essere chiamata direttamente dal file del plugin principale. Regole di attivazione: register_activation_hook () dovrebbe essere chiamato dal file del plugin principale dove si trova la direttiva Plugin Name: ... e non dovrebbe essere chiamato da nessun hook come plugins_loaded o init. La funzione hook deve trovarsi nello stesso file dell'hook o essere inclusa in anticipo da un altro file. Nella funzione hook, l'eco non funziona. Perché c'è un reindirizzamento e non vedrai l'eco. Ma die () può essere utilizzato. Quando un plug-in è attivato, il file del plug-in principale non è incluso nell'ambito globale, ma all'interno della funzione activ_plugin (). Pertanto, le variabili considerate globali durante il normale funzionamento del plug-in non saranno globali. Ad esempio, la funzione utilizzata in register_activation_hook () potrebbe non vedere le variabili globali, anche se le hai dichiarate come globali all'interno di questa funzione. Esempio: $ myvar \u003d "qualcosa"; register_activation_hook (__ FILE__, "myplugin_activate"); function myplugin_activate () (global $ myvar; echo $ myvar; // La variabile non è uguale a "qualcosa") A causa di questa caratteristica, le variabili globali devono essere sempre specificate esplicitamente. Tutte le variabili globali devono essere definite come globali, anche se la variabile è specificata nel corpo del plugin. Solo in questo caso ci sarà accesso ovunque. Esempio: Global $ myvar; // indica esplicitamente che questa è una variabile globale $ myvar \u003d "qualcosa"; register_activation_hook (__ FILE__, "myplugin_activate"); funzione myplugin_activate () (global $ myvar; echo $ myvar; //\u003e qualcosa) Non ci sono ganci. nullo. Non restituisce nulla. Il nome della funzione di callback. Per le classi, usa un array: array ($ this, "nome_funzione"); ... La funzione riceverà una variabile booleana $ network_wide - se il plugin è attivato per l'intera rete di siti quando è multisito. Supponiamo di avere una funzione my_plugin_activate () nel file principale del plug-in: wp-content / plugins / myplugin / myplugin.php, quindi per eseguire questa funzione durante l'attivazione del plug-in utilizzare il seguente codice: Register_activation_hook (__ FILE__, "my_plugin_activate"); function my_plugin_activate () (// Codice di attivazione ...) Se il plugin utilizza una classe PHP, il codice di attivazione viene aggiunto in questo modo: Register_activation_hook (__ FILE__, array ("My_Plugin", "install")); class My_Plugin (funzione statica install () (// Non creare alcun output qui ...)) Se la classe che contiene la funzione di attivazione si trova in un file separato, registra la funzione di attivazione in questo modo: Include_once __DIR__. "/class-My_Plugin.php"; register_activation_hook (__ FILE__, array ("My_Plugin", "on_activate_function")); Se ti trovi all'interno di __construct (). È importante sottolineare che __FILE__ deve "guardare" il file del plugin principale: Register_activation_hook (__ FILE__, array ($ this, "YOUR_METHOD_NAME")); Dopo aver attivato il plugin, vengono attivati \u200b\u200bsolo due hook: activ_plugin e shutdown. Quando devi fare qualcosa subito dopo aver attivato un plugin, puoi allegare una funzione ad essi. Quando una tale soluzione non funziona, è possibile utilizzare le opzioni WP: salvare i dati in un'opzione e quindi verificare l'opzione e fare qualcosa se l'opzione è: // File principale del plugin. ... function my_plugin_activate () (// aggiungi un'opzione in modo che in seguito se ce n'è una per fare qualcosa. add_option ("Activated_Plugin", "Plugin-Slug"); // Ecco il codice di attivazione ...) register_activation_hook (__ FILE__, " my_plugin_activate "); function load_plugin () (if (is_admin () && get_option ("Activated_Plugin") \u003d\u003d "Plugin-Slug") (// elimina l'opzione aggiunta in modo che non funzioni più // e fai quello che ci serve ... delete_option ("Activated_Plugin "); // Fai qualcosa una volta, dopo aver attivato il plugin // Ad esempio: add_action (" init "," my_init_function ");)) add_action (" admin_init "," load_plugin "); Un'altra opzione per fare qualcosa durante l'attivazione del plugin è creare il tuo evento in questo modo: Funzione my_plugin_activate () (// Installa il nostro hook in modo che tu possa allegarlo dai file del plugin stesso do_action ("my_plugin_activate");) register_activation_hook (__ FILE__, "my_plugin_activate"); Un piccolo plugin che mostra come utilizzare la funzione: / * Nome plugin: A Descrizione test: A Test * / require_once dirname (__ FILE__). "/my_other_file.php"; / * Questo codice non funzionerà. L'hook di attivazione deve essere chiamato dal file principale. register_activation_hook (dirname (__ FILE__). "/my_other_file.php", "my_other_function"); * / // Questo è codice funzionante. register_activation_hook (__ FILE__, "test_activated"); / * Questo è il modo corretto per dichiarare e accedere alle variabili globali. Le variabili globali devono essere dichiarate chiaramente. Senza questo, non avrai accesso a loro. * / global $ qualche_var; $ some_var \u003d "hey"; // Funzione di attivazione funzione test_activated () (// qui $ some_var non sarà uguale a hey global $ some_var; // E qui $ some_var sarà uguale a hey // Questa funzione è definita nel file "my_other_file.php" my_other_function (); / * Questa questo non funzionerà. Se hai bisogno di scrivere i log in un file temporaneo, usa fopen / fwrite. Se vuoi verificare se l'hook di attivazione funziona, usa exit () all'interno della funzione hook. * / echo "test_activated called!";) Ti consente di utilizzare un'installazione di WordPress per più siti contemporaneamente. Inoltre, ogni sito riceve le proprie tabelle nel database con un prefisso univoco. Le tabelle con i dati degli utenti registrati sono comuni a tutti i siti della rete. Questo è un vantaggio decisivo e registrandoti una volta puoi avere accesso a diversi siti. Inoltre, su ogni sito lo stesso account può avere diritti diversi. Ad esempio, su un sito un utente può essere un editore e su un altro un amministratore. In una tipica installazione di WordPress, la pagina di registrazione, accesso e reimpostazione della password visualizza il file wp-login.php. In modalità multisito, il core di WordPress inizia a comportarsi in modo leggermente diverso e quando fai clic sul collegamento wp-login.php? Action \u003d register, si verificherà un reindirizzamento a wp-signup.php. Questa è la tua pagina di registrazione alla rete, che è il sito WordPress predefinito. Oltre a registrare account utente regolari, è possibile creare un nuovo sito Web su di esso, se il super amministratore ha abilitato questa funzione nelle impostazioni di rete (Amministrazione di rete → Impostazioni → Impostazioni di rete). Nella maggior parte dei temi, la pagina di registrazione non ha un bell'aspetto. Molte skin utilizzano framework CSS come Bootstrap e le loro classi specifiche per modellare diversi elementi sulle pagine, quindi è difficile scrivere un singolo HTML che funzioni per tutti. Ma non disperare se la pagina sembra disordinata. Il file wp-signup.php è fantastico all'inizio, quando non hai tempo per lavorare su ogni dettaglio del sito, puoi concentrarti su altre pagine e contenuti più importanti. Quando sei pronto per creare la tua pagina di registrazione, wp-signup.php sarà un buon esempio per comprendere facilmente la gamma di funzioni che WordPress fornisce per la gestione e la convalida dell'input dell'utente e la creazione di nuovi account. Per impostazione predefinita, WordPress apre una pagina di registrazione (wp-signup.php) sul dominio principale (sito) della rete. Tuttavia, puoi creare pagine di registrazione per ogni sito sulla rete, anche se hanno temi. Considereremo il caso in cui tutti i siti della rete utilizzino lo stesso tema, ma ognuno di essi ha una pagina di registrazione. I siti differiscono nella lingua (inglese e russo), quindi la pagina di registrazione verrà visualizzata nella lingua "nativa" del sito. Se i siti utilizzano temi diversi, tutto dipenderà dal tipo di temi che sono, se lo stesso layout si adatta a loro (una situazione eccellente che può spingerti a unificare tutti i tuoi temi) o se vale la pena elaborare le pagine individualmente. I plugin MU possono contenere un numero qualsiasi di file e strutture che ti sembrano logiche. Mi attengo a qualcosa di simile a questa gerarchia: | mu-plugins | | load.php | | selena-network | | | iscriviti | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php Il file load.php include le traduzioni e tutti i "plugin" necessari: // Carica le traduzioni per i plugin MU load_muplugin_textdomain ("selena_network", "/ selena-network / languages \u200b\u200b/"); // Funzionale per la pagina di registrazione richiede WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Un altro plugin // richiede WPMU_PLUGIN_DIR ... Le cartelle dei plugin sono archiviate nella directory selena-network. Ognuno ha il proprio plugin.php, che includiamo in load.php. Ciò offre flessibilità e la possibilità di disabilitare e abilitare istantaneamente i singoli componenti in un progetto funzionante in caso di emergenza. Dopo aver capito dove e come scriveremo il codice, possiamo procedere alla creazione della pagina di registrazione. Creiamo una pagina con l'indirizzo example.org/signup/ tramite una normale interfaccia. Come indirizzo, puoi utilizzare qualsiasi URL che sembra appropriato per il tuo progetto. Affinché WordPress possa conoscere la nostra nuova pagina di registrazione e reindirizzarla, quando si fa clic sul collegamento "Registrati", viene utilizzato il filtro wp_signup_location. Può essere trovato all'interno di wp-login.php ed è responsabile del reindirizzamento a wp-signup.php per impostazione predefinita. Caso "register": if (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location", network_site_url ("wp-signup.php"))); exit; // ... Come ricordi, per impostazione predefinita, la pagina di registrazione si apre sul dominio principale della rete. Questo è il motivo per cui network_site_url () viene utilizzato qui. Aggiungi il nostro gestore al filtro in mu-plugins / selena-network / signup / plugin.php, che restituirà l'indirizzo della pagina di registrazione sul sito corrente: Funzione selena_network_signup_page ($ url) (return home_url ("signup");) add_filter ("wp_signup_location", "selena_network_signup_page", 99); selena_network è il prefisso che utilizzo nei nomi di tutte le funzioni all'interno dei plugin MU sul mio sito per evitare collisioni, dovrebbe essere sostituito con il mio prefisso univoco. Il filtro ha una priorità di 99 perché alcuni plugin come bbPress e BuddyPress potrebbero sovrascrivere questo URL con il proprio (i plugin MU vengono caricati prima dei plugin normali, vedi sopra). Si noti che viene utilizzata home_url () che, a differenza di network_site_url (), restituisce l'indirizzo del sito corrente, non il sito principale della rete. Il file wp-signup.php contiene molte funzioni e codice. Per vedere il quadro generale, puoi usare la piegatura del codice. Questo di solito è chiamato "piegatura del codice" in inglese. All'inizio del file da 1 a 80 righe (nella versione 4.1.1), vengono eseguiti vari controlli e output dell '"inizio" della pagina utilizzando get_header (). Successivamente, vengono dichiarati molti metodi e prima di iniziare a lavorarci, vale la pena capire cosa fa ciascuna funzione. Molti di loro usano spesso altre funzioni con il prefisso wpmu_ all'interno, tutte dichiarate nel file wp-includes / ms-functions.php. Questa sezione è difficile da capire senza vedere il codice da soli. Di seguito una breve descrizione delle principali funzioni in caso di problemi. In fondo al file wp-signup.php (dalla riga 646 nella versione 4.1.1), la logica principale della pagina di registrazione, che utilizza tutti i metodi sopra. Questa parte del codice non è inclusa nella funzione. Alla fine viene chiamato get_footer (). Successivamente, descriveremo la procedura per copiare wp-signup.php nei plugin MU e apportare modifiche al "fork". Forse questo potrebbe non sembrare il modo giusto. Invece, puoi scrivere la tua convalida del modulo e visualizzare le funzioni da zero usando le classi piuttosto che le normali funzioni. Secondo me, wp-signup.php ha già tutta la logica necessaria per la nostra pagina, resta solo da fare piccole modifiche. Quando aggiorni WordPress, wp-signup.php cambia di volta in volta, ma questo non significa che ad ogni versione dovrai sincronizzare il tuo fork. Le funzioni all'interno di wp-signup.php sono essenzialmente impegnate solo nell'output HTML, nella convalida dei dati, nella creazione di account e siti, sono coinvolti metodi con il prefisso wpmu_, dichiarato in ms-functions.php. Cominciamo creando una funzione che mostrerà il form di registrazione nella pagina. Per fare ciò, copia wp-signup.php dalla radice di WordPress in mu-plugings / selena-network / signup /. Collegiamolo all'interno di mu-plugins / selena-network / signup / plugin.php). Richiedi WPMU_PLUGIN_DIR. "/selena-network/signup/wp-signup.php"; Rimuoviamo tutti i controlli necessari e non necessari dall'inizio del file copiato. Nella versione 4.1.1, questo è tutto il codice da 1 a 80 righe. Siamo ora pronti per creare la funzione principale per visualizzare il form di registrazione. Per fare ciò, sposta tutta la logica dalla riga 646 alla fine del file in una funzione chiamata selena_network_signup_main. Alla fine, rimuoveremo le due chiusure extraDai un'occhiata
Risultato
Funzionalità del tema: invasione del territorio dei plugin
Introduzione alla libreria di attivazione del plugin TGM
Configurazione dell'attivazione del plugin TGM
"mytheme-tgmpa", // il tuo ID TGMPA univoco "default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /", // percorso assoluto predefinito "menu" \u003d\u003e "mytheme-install-required-plugins", // menu slug "has_notices" \u003d\u003e true, // Mostra gli avvisi dell'amministratore "dismissable" \u003d\u003e false , // gli avvisi NON sono ignorabili "dismiss_msg" \u003d\u003e "Ho davvero, davvero bisogno che tu installi questi plugin, okay?", // questo messaggio verrà visualizzato all'inizio di nag "is_automatic" \u003d\u003e true, // automaticamente attiva i plugin dopo l'installazione "message" \u003d\u003e "", // messaggio da visualizzare subito prima della tabella dei plug-in" strings "\u003d\u003e array (); // L'array di stringhe di messaggio utilizzato dall'attivazione del plug-in TGM);?\u003e Conclusione
Sito principale della rete
functions.php?
Divagazione lirica
Ordina in file
Indirizzo della pagina di registrazione
Crea una pagina
wp-signup.php e wp-activation.php
Inviamo lettere di attivazione
Conclusione
Bonus. Protezione dagli spammer
Come funziona
Condizioni d'uso
Una nota sulla portata variabile
ritorna
Utilizzando
register_activation_hook ($ file, $ funzione); $ file (stringa) (obbligatorio) Il percorso del file php principale del plugin incluso il nome del plugin stesso. Di solito viene utilizzata la costante magica PHP __FILE__. $ funzione (stringa / array / lambda) (obbligatorio)
Esempi di
# 1. Esecuzione di una funzione durante l'attivazione di un plugin
# 2. Esecuzione di un metodo di classe
# 3. Esecuzione di un metodo di classe da un file separato
# 4. Esecuzione di un metodo di classe dalla classe stessa
# 5 Fai qualcosa subito dopo aver attivato il plugin
# 6 Un'altra dimostrazione dell'utilizzo della funzione
Sito principale della rete
Alternativa a functions.php
Ordina in file
Pagina di registrazione
Reindirizza alla pagina di registrazione richiesta
Funzionalità wp-signup.php
Copia la funzionalità di wp-signup.php