La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.

I collegamenti monouso possono essere utilizzati in una varietà di situazioni: al fine di fornire un accesso temporaneo al file o alla pagina o per confermare la registrazione. In questa lezione, mostreremo come generare e implementare indirizzi URL usa e getta.

Creando URL.

Supponiamo che il nostro sito abbia un sistema di autenticazione utente. Dopo la registrazione, chiediamo all'utente di passare la procedura di verifica e-mail. Per creare tali collegamenti possiamo utilizzare il parametro token speciale. Un esempio di tale collegamento:

Http: //example.com/activeVate? Token \u003d EE97780 ...

Senza un database, non possiamo fare qui, quindi guardiamo al tavolo con il quale lavoreremo.

Crea tabella Pending_USERS (Token Char (40) Non NULL, Nome utente Varchar (45) Non nullo, Tstamp Integer Unsigned non null , chiave primaria (token);

Nel tavolo memorizzeremo 3 campi: token, nome utente e tempo. Per generare un token, useremo la funzione SHA1 (), che fornisce una stringa di 40 caratteri. Il campo TSPAMP memorizzerà il tempo di generazione del token in modo che possiamo tenere traccia dei collegamenti con un outpher.

Ci sono molti modi per generare un token, ma in questa lezione useremo le funzioni UNIQID () e SHA1 () (). Indipendentemente dal metodo di generare un token, assicurarsi che i valori generati siano diversi e la probabilità di duplicazione è minima.

$ token \u003d SHA1 (UNIQID ($ Username, TRUE));

Come parametro, la funzione UNIQID () prende la stringa e l'uscita fornisce un identificativo univoco in base all'argomento trasmesso e all'ora corrente. Inoltre, come secondo argomento, questa caratteristica Accetta un valore booleano che l'UNIQID aggiungerà alcuni caratteri aggiuntivi per aumentare la probabilità dell'unicità del valore. La funzione SHA1 prende un identificativo univoco e crea un hash.

Dopo aver lavorato su due funzioni, avremo un token unico che può essere utilizzato per generare indirizzi dell'URL. Ora dobbiamo metterlo nel database:

$ Query \u003d $ DB-\u003e Prepara ("Inserisci in Valori Pending_USer (Nome utente, Token, TStamp) (?,?)"); $ Query-\u003e Execute (array ($ username, $ token, $ _server ["request_time"]));

Per consentirci di sapere quale utente dovrebbe essere attivato, registreremo e accederemo alla tabella. Ad esempio, più adattato per un sito web reale, è possibile utilizzare l'ID utente.

Ora che abbiamo tutti le informazioni necessarie, Possiamo creare un indirizzo URL temporaneo:

$ url \u003d "http://example.com/activate.php?token\u003d$token";

$ Messaggio \u003d.<<

Dai un'occhiata

Ora abbiamo bisogno di una sceneggiatura, grazie a cui controlleremo. Tutto ciò che dobbiamo fare è confrontare il token dall'indirizzo URL e il token dalla base. Se c'è una cosa del genere, e il tempo della sua vita non è scaduto, allora tutto è ok.

// Ottieni se Token (ISSET ($ _ Ottieni ["Token"]) && preg_match ("/ ^ (40) $ / i", $ _get ["token"])) ($ token \u003d $ _get ["token" ];) Altro (lanciare una nuova eccezione ("Tocken non è valida".);) // Verifica $ Query \u003d $ db-\u003e preparare token ("Seleziona nome utente, Tstamp da Pending_User dove Token \u003d?"); $ Query-\u003e Execute (array ($ token)); $ riga \u003d $ query-\u003e recupera (PDO :: fetch_assoc); $ Query-\u003e closecursor (); se ($ riga) (estratto ($ riga);) altrimenti (lanciare una nuova eccezione ("Tocken non è valida".);) // Attivare l'account utente // ... // Rimuovere il token dalla base $ query \u003d $ DB\u003e Prepara ("Elimina da Pending_USERS dove nome utente \u003d? E token \u003d? E tstamp \u003d?",); $ Query-\u003e Execute (array ($ username, $ token, $ tstamp));

Abbiamo anche bisogno di fornire test di token, la cui vita è scaduta:

// 1 giorno in secondi \u003d 60 secondi * 60 minuti * 24 ore $ delta \u003d 86400; // controlla se ($ _server ["request_time"] - $ tstamp\u003e $ delta) (lanciare una nuova eccezione ("Tocken Lifetime scaduta");) // attiva l'account personalizzato // ...

Pertanto, avremo due controlli: uno sulla validità del token, l'altro al momento della sua esistenza.

Risultato

Questo metodo può essere applicato non solo per attivare conti Utenti, ma anche in altre esigenze: ad esempio, per fornire un accesso singolo o temporaneo a una risorsa o un servizio.

Oltre a tutto questo, è possibile creare uno script che rimuoverà i token che non hanno mai usato. Questo script può essere lanciato di volta in volta o richiedere questo cron.

Gli argomenti non sono solitamente funzionali, ma a volte noi, gli sviluppatori, è necessario introdurre alcune possibilità nel nostro argomento per renderlo un po 'meglio e conveniente.

In questa guida, considereremo il termine "territorio dei plugin", oltre ad apprendere come utilizzare uno strumento fantastico scritto da Thomas Griffin: TGM Plugin Activation Library.

Funzionalità dell'argomento: invasione al territorio dei plugin

I temi sono progettati per cambiare la progettazione del sito web WordPress. Idealmente, l'argomento dovrebbe influenzare solo l'aspetto visivo. Tuttavia, nella nostra "Golden Age" WordPress, gli sviluppatori plug-in spesso includono caratteristiche funzionali nei loro argomenti che ti consentono di mantenere la competitività nel mercato.

Questa è l'invasione del territorio dei plugin. Possiamo presentare il "territorio dei plugin" come alcune sezioni funzionali del codice. Qualsiasi snippet di codice che cambia la funzionalità del tuo sito deve essere rappresentato come un plug-in se il codice specificato non viene posato nel kernel WordPress.

Ho già formulato prima in uno dei miei articoli una regola empirica "Plugin del territorio:

Se la peculiarità è correlata alla rappresentazione visiva del sito, in questo caso dovrebbe essere inclusa nell'argomento; Se è associato alla funzionalità, allora deve essere rappresentato come un plug-in separato.

Regola piuttosto semplice. Le persone cercano ancora di registrarsi nel livello dei frammenti funzionali del codice nei loro argomenti, ma i cataloghi dei temi (come wordpress.org o temaform) non prendono temi che invadono il territorio dei plugin. Pertanto, la proposta di funzionalità nei temi è diventata un certo problema.

Fortunatamente, c'è una soluzione semplice che non va contro la regola del "territorio dei plugin".

Introduzione alla libreria di attivazione del plugin TGM

Impostazione dell'attivazione del plugin TGM

Prestare attenzione alla funzione TGMPA () con due parametri alla fine del codice. Il secondo parametro è la variabile $ config, che è anche un array, come $ plugin. Come segue dal suo nome, è possibile configurare la libreria di attivazione del plugin TGM utilizzando di questo massiccio. La variabile accetta il proprio insieme di opzioni:

  • iD (stringa) è un ID univoco per la libreria di attivazione del plugin TGM nel tuo argomento. Questo è molto importante: se altri plugin utilizzano anche l'attivazione del plugin TGM, gli ID diversi impediranno possibili conflitti.
  • default_path (stringa): un percorso assoluto predefinito per i plug-in nel tuo argomento. Quando lo installi, è possibile utilizzare il nome del file zip come valore del parametro sorgente per il plug-in.
  • menu (String) - Menu Menu per Installazione dei plug-in.
  • has_Noti (Boolean) - Se specificato in VERO, le notifiche amministrative saranno emesse per i plug-in richiesti / consigliati.
  • impiegato (booleano) - Se specificato nel vero, l'utente può "chiudere" notifiche.
  • dISTSISS_MSG (String) - Se l'opzione Lostmissible è impostata su false, questo messaggio verrà visualizzato sopra la notifica dell'amministratore.
  • is_automatic (Boolean) - Se specificato in True, i plugin verranno attivati \u200b\u200bdopo che l'utente accetta di installarli.
  • messaggio (stringa) - HTML aggiuntivo, visualizzato davanti al tavolo plug-in.
  • strings (array) - Un array che include messaggi visualizzati. Puoi impostarli come linee di trasmissione. Guarda il file example.php per vedere lista completa Tutti i post.
"Mytheme-TGMPa", // Il tuo ID TGMPA unico "default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugin /", // Default Absolute Path "Menu" \u003d\u003e "Mytheme-install-obbligatorio-plugin", // menu slug "has_noti" \u003d\u003e true, // Mostra admin Avvisi "licenziamento" \u003d\u003e falso , // Le comunicazioni non sono licenziate "licenziamento_msg" \u003d\u003e "Io davvero, ho davvero bisogno di installare questi plugin, ok?", // Questo messaggio verrà emesso in cima a Nag "IS_AUTOMATIC" \u003d\u003e TRUE, // automaticamente Attiva i plugin dopo l'installazione "Messaggio" \u003d\u003e "", // Messaggio in uscita a destra prima della tabella dei plug-in" stringhe "\u003d\u003e array (); // La matrice di stringhe del messaggio utilizzata da attivazione del plugin TGM);?\u003e

Conclusione

Come puoi vedere, suggerire funzionalità in temi Wordpress. Forse - devi solo pensare prima di tutto sugli utenti che possono passare da un argomento all'altro. La libreria di attivazione del plugin TGM offre un modo davvero intelligente per questo.

Cosa ne pensi di questo strumento? L'hai mai usato, hai intenzione di usarlo in futuro? Condividi i tuoi pensieri!

Crea la tua pagina di registrazione per MultiSite anziché standard WP-signup.php.

Nella consueta installazione Pagina di Wordpress. Registrazione (Autorizzazione, Ripristino password) Visualizza il file WP-LOGIN.php.

  • /wp-login.php - Autorizzazione
  • /wp-login.php?action\u003dregister - Registrazione
  • /wp-login.php?action\u003dlostpassword - Reset password

Per multiite in wp-login.php ci sono condizioni separate. Quindi, quando fai clic sul collegamento /wp-login.php?action\u003dRegister su MultisAite, WordPress effettuerà un reindirizzamento alla pagina /WP-SignUp.php. In molti argomenti, la pagina non sembra molto attraente, quindi faremo il nostro.

Rete principale del sito Web

Per impostazione predefinita, Wordpress apre la pagina di registrazione (WP-signup.php) sulla rete principale del dominio (sito Web). Tuttavia, è possibile effettuare una pagina di registrazione separata per ciascun sito di rete, anche se hanno argomenti diversi. Considereremo il caso quando su tutti i siti di rete dispongono della propria pagina di registrazione, ma lo stesso argomento è utilizzato e i siti differiscono solo nella lingua. Se vengono utilizzati argomenti diversi, dovrai scrivere più codice.

functs.php?

Non. Il nome di questo file sembra essere menzionato in qualsiasi articolo su WordPress. Nel nostro caso, tenendo conto del fatto che la funzionalità di registrazione è progettata per diversi siti, ha senso prenderlo in mu-plugin che vengono caricati all'apertura di qualsiasi sito.

Digressione lirica

Vale la pena notare che i plugin MU sono caricati prima dei plugin ordinari e fino a quando il kernel WordPress è completamente caricato, quindi la chiamata per alcune funzioni può portare a bug fatali in PHP. Simili download "anticipato" ha i suoi vantaggi. Diciamo che all'interno di qualsiasi tema non può aggrapparsi ad alcune azioni attirate prima di scaricare il file Functions.php dall'argomento. Un esempio di questo può fungere da jetpack_module_loaded_related-Posts Plugin (post correlati - il nome del modulo) con cui è possibile tenere traccia dell'attività dei moduli in Jetpack. È impossibile "frizione" dal file argomento a questa azione, poiché l'azione ha già funzionato prima di caricare l'argomento - i plugin sono caricati in precedenza. Puoi dare un'occhiata all'immagine comune dell'ordine di avvio WordPress nella pagina di riferimento dell'azione nel codice.

Ordine nei file

MU-Plugin può contenere un numero qualsiasi di file e qualsiasi grafico, che sembrerà logico per te. Aderire a una tale gerarchia:

| -MU-Plugins | - | Load.php | - | - | Selena-Network | - | - | - | - -Signup | - | - | - | - | --plugin.php | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | - -plugin.php

Nel file Load.php, tutti i "plugin" necessari sono collegati alla nostra rete:

Carica Traslates per tutti i componenti aggiuntivi Load_MUplugin_TextDomain ("Selena_Network", "/ Selena-Network / Lingue /"); // Iscrizione alla rete richiede wpmu_plugin_dir. "/selena-network/signup/plugin.php"; // Un altro plugin // Richiedi wpmu_plugin_dir ...

All'interno della cartella di Selena-Network, vengono memorizzate le cartelle dei plug-in, ognuna ha il proprio plugin.php, che ci colleghiamo su load.php. Dà flessibilità e la capacità di disabilitare rapidamente e includere alcune cose.

Indirizzo della pagina di registrazione

Per specificare l'indirizzo della pagina di registrazione, utilizzare il filtro WP_SignUp_Location. Si può trovare all'interno del file wp-login.php ed è lui che è responsabile per il reindirizzamento sul wp-signup.php.

Caso "Registrato": if (IS_Multisite ()) (WP_REDIRECT (Apply_Fireders ("WP_Signup_Location", Network_site_url ("WP-signup.php"))); Esci;

Aggiungi la tua funzione in MU-Plugin / Selena-Network / Signup / Plugin.php, che fornirà all'indirizzo della pagina di registrazione sul sito Web corrente:

Funzione selena_network_signup_page ($ URL) (ritorno home_url (). "/ Iscriviti /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network - prefisso, che uso nei nomi di tutte le funzioni all'interno del MU-Plugin sul mio sito per evitare conflitti, deve essere sostituito con il proprio prefisso unico. La priorità di aggiungere il filtro 99, poiché alcuni plugin, come BBPress e Buddypress, possono sovrascrivere questo indirizzo ai propri (MU-Plugin vengono caricati prima dei plugin convenzionali, vedere sopra). Si noti che Home_url () viene utilizzato, invece di network_site_url (), per lasciare il visitatore sullo stesso dominio. Puoi usare qualsiasi URL come indirizzo.

Creando una pagina.

Ora creiamo una pagina con sito.com/signup/ attraverso un'interfaccia regolare, e nel modello di cartella della struttura figlia per la nostra nuova pagina - pagina-signup.php. Invece della parola "Iscriviti" è possibile utilizzare un ID univoco.

All'interno del nuovo modello, è necessario chiamare la funzione selena_network_signup_main (), che mostrerà il modulo di registrazione.

Vale la pena notare che l'intero processo con i modelli non è richiesto e invece è possibile creare il tuo shortcode, che chiamerà anche la funzione selena_network_signup_main ().

wp-signup.php e wp-activate.php

Ora creeremo una funzione che mostrerà il modulo di registrazione. Per fare ciò, copiare i file WP-signup.php e wp-activate.php dal root wordpress in mu-plugings / selena-network / iscrizione / (e non dimenticare di collegarli all'interno di MU-Plugin / Selena-Network / Iscrizione / plugin.php). Ulteriori manipolazioni con i file sono estremamente difficili e lunghe da descrivere, quindi vieni a renderli da soli. Descriverò solo cosa deve essere fatto esattamente e pubblicare i file sorgente del tuo progetto:

  1. All'inizio del file, eliminare tutti richiedono, chiamando le funzioni e altre funzioni esterne del codice.
  2. Rinominare tutte le funzioni aggiungendo prefissi unici ai nomi.
  3. La parte inferiore del codice WP-signup.php è avvolta nella funzione SELENA_NETWORK_SIGNUP_MAIN e nel suo cominciando a inizio di scrivere Global $ Active_SignUp; .
  4. Sostituisci il layout da solo nei posti giusti.

All'interno del wp-activate.php devi fare allo stesso modo:

  1. Elimina tutte le funzioni esterne del codice, avvolgono il layout in una funzione separata.
  2. Cambia il layout in luoghi in cui è necessario.

Il file WP-Activate.php è responsabile della pagina di attivazione dell'account. Come con la pagina di registrazione, è necessario creare un modello separato all'interno della quale chiamare una funzione dal file WP-Attiva.php.

Inviamo le lettere di attivazione

La pagina di registrazione invia una lettera al visitatore con riferimento all'attivazione dell'account. Per impostazione predefinita, questa è la funzione WPMU_SignUp_User_Notification () dal file MS-Funts.php. La sua funzionalità può essere presa in prestito per la sua funzione. Il motivo per cui si desidera rifiutare di utilizzare questa funzione: invia un riferimento di attivazione dell'account con WP-Activate.php. È possibile disabilitare questa funzione utilizzando il filtro WPMU_Signup_User_Notification spostando il falso su di esso (se questo non è da fare, la lettera di attivazione verrà inviata due volte, ok, infatti due lettere diverse).

Funzione Armyofselenagomez_wpmu_signup_User_Notification ($ utente, $ user_mail, $ key, $ meta \u003d array ()) (// ... // codice da wpmu_signup_User_nitification () Funzione wp_mail ($ user_email, wp_specialchars_decode ($ soggetto), $ Message, $ message_headers ); Restituire false;) add_filter ("wpmu_signup_user_nitificazione", "armyoflegengenagomez_wpmu_signup_user_nitificazione", 10, 4);

Di conseguenza, la pagina di registrazione nell'argomento di Selena ha iniziato a sembrare molto più pulito e attento.

Conclusione

Su Internet, molti altri non sono molto modi giusti Come fare gli stessi - Reindirizzamenti Apache, Forme Ajax che non funzionerà senza script Java, ecc. Non mi piaceva molto, quindi ho provato a farlo più correttamente sul mio sito.

Noto che i file di modifica dovrebbero essere in grado di essere attentamente e cercare di non allontanarti dalla sorgente alla ranknesh, se WordPress cambia i file WP-signup.php e wp-activate.php, erano più facili da confrontare per trovare modifiche .

Non dimenticare di guardare fonte Tutte le funzioni sopra descritte per affrontare appieno cosa e cosa succede all'interno del codice.

Bonus. Protezione contro gli spammer.

Anche i siti più giovani su WordPress sono spesso soggetti alla registrazione dello spam. È possibile scrivere condizioni infinite per il filtraggio dei bot, spesso più simili a provare a creare intelligenza artificiale 🙂 Nel caso di un multite, un reindirizzamento regolare di Apache mi ha aiutato, con il quale quando si apre /wp-signup.php e /wp-acitVate.php, ho chiesto di emettere 404 (non sono un esperto di configurazione di Apache, quindi il mio Le regole potrebbero non essere molto corrette).

Rewriteengine su RewriteBase / Rewriterule ^ WP-signup \\ .php - Rewriterule ^ wp-attiva \\ .php - # Inizia Wordpress # Regole da Wordpress per impostazione predefinita Non toccare :) # ... # fine wordpress

P. S. Cerco di descrivere alcune cose di terze parti come in dettaglio il più possibile, perché quando ho iniziato, a volte era in qualche modo dire di dire e spiegare molte cose. Credo anche che piccoli consigli simili su altri materiali qualcuno sarà spinto allo studio di qualcosa di nuovo ed espandendo il loro campo di conoscenza. Le espressioni regolari sono utilizzate nei record di Reriterule, non sono completamente complessi, ad esempio, il simbolo ^ indica l'inizio della linea.

Registra una funzione che verrà attivata durante l'attivazione del plugin.

Questa funzione collega la funzione di richiamata specificata al gancio di attivazione_ (plugin) ed è un wrapper per questo gancio.

(Plugin) nel gancio Attiva_ (plugin) viene sostituito dal nome del relativo consentono al file plug-in principale. Ad esempio, se si trova il plugin: wp-content / plugin / sampleplugin / sample.php, quindi il nome del hook sarà: attivare_samplePlugin / sample.php.

Dalla versione 3.1. Gancio funziona solo durante l'attivazione del plugin e non funziona durante aggiornamento automatico collegare.

Come funziona

Il plugin è attivato dalla funzione di attivazione_plugin () in cui viene attivato il gancio di attivazione_ (plugin).

La funzione di attivazione_plugin () nel kernel viene invocata già dopo aver caricato il mezzo VP. Questa funzione collega il file plug-in master (e tutto ciò che è specificato in esso), quindi attraverso un gancio attiva la funzione di richiamata specificata. A causa di ciò, tutte le funzioni e le classi del plug-in sono disponibili nella nostra funzione di callback. Ma, poiché tutti i ganci principali del WP hanno già lavorato durante l'avvio medio IT, non ci sono eventi plug-in sono appesi a ganci, ad esempio plugins_loaded, non funzionano più quando si collega il file principale del plug-in. Quindi, il nostro plugin sarà collegato, ma non completamente: non come dovrebbe connettersi quando è già attivato.

Ad esempio, se il plugin rende qualsiasi cosa durante il plugin dell'evento_loadato, quindi tutte queste azioni semplicemente non accadranno quando l'attivazione del plug-in. Ad esempio, se collega il file di traduzione, il file di traduzione non sarà collegato al momento di attivare la funzione di callback specificata per register_activation_Hook ().

Di norma, dopo che la funzione di richiamata viene attivata, ci sono 2 eventi per appendere le funzioni: attivato_plugin e spegnimento.

Per fare qualcosa di straordinario quando il plugin è attivato, vedere Esempio 5.

Termini di utilizzo

La funzione non funzionerà se lo chiami al momento del gancio, ad esempio Plugins_loaded, init. La funzione deve essere chiamata direttamente dal file principale del plug-in. Regole di attivazione:

    register_Activation_Hook () deve essere chiamato dal file Plugin master, da cui si trova la direttiva sul nome del plug-in: ... e non dovrebbe essere chiamato da alcuna gancio, come plugins_loaded o init.

    La funzione gancio dovrebbe essere nello stesso file come gancio o connettersi in anticipo da un altro file.

    La funzione del gancio non funziona sullo schermo (eco). Perché il reindirizzamento e l'eco si svolgono. Ma puoi usare Die ().

  1. Le variabili globali (se presenti) devono essere determinate esplicitamente per accedervi dalla funzione Gancio.

Note sull'area delle variabili

Quando si attiva il plug-in, il file plug-in principale non è collegato nell'area globale, ma all'interno della funzione di attivazione_plugin (). Pertanto, variabili che come al solito in modalità Il lavoro del plugin è considerato globale, non sarà globale.

Quindi, la funzione utilizzata in Retist_Activation_Hook () potrebbe non vedere le variabili globali, anche se li ha dichiarati globali all'interno di questa funzione. Esempio:

$ Myvar \u003d "qualcosa"; register_activation_hook (__ file__, "myplugin_activate"); Funzione myplugin_active () (Global $ myvar; echo $ myvar; // La variabile non è uguale a "qualcosa")

A causa di questa funzione, dovrebbero sempre essere specificate le variabili globali. Tutte le variabili globali devono essere definite come globali, anche se la variabile è indicata nel corpo del plug-in. Solo in questo caso sarà accessibile a loro ovunque. Esempio:

Global $ myvar; // indica chiaramente che questa è una variabile globale $ myvar \u003d "qualcosa"; register_activation_hook (__ file__, "myplugin_activate"); Funzione myplugin_active () (Global $ myvar; echo $ myvar; //\u003e qualcosa)

Nessun gancio.

ritorna

nULLO. Niente ritorna.

Usando

register_activation_hook ($ file, $ funzione); $ file. (stringa) (richiesto) La strada per la cosa principale file PHP. Plugin incluso il nome del plugin stesso. Tipicamente usato il php costante magico __file__. $ Funzione. (linea / array / lambda) (richiesto)

Nome della funzione di callback. Per le classi, usa un array: array ($ questo, "nome della funzione"); .

La funzione riceverà una variabile logica $ Network_wide - se il plugin è attivato per l'intera rete di siti, con multisaite.

Esempi

#uno. Esecuzione di una funzione quando si attiva il plugin

Supponiamo di avere una funzione my_plugin_activate () nel file principale del plugin: WP-content / plugin / myplugin / myplugin.php, quindi per avviare questa funzione durante l'attivazione del plugin, utilizzare un codice tale:

Register_activation_hook (__ file__, "my_plugin_active"); Funzione my_plugin_activate () (// codice di attivazione ...)

# 2. Avvio di un metodo di classe

Se il plugin utilizza la classe PHP, il codice di attivazione viene aggiunto come:

Register_activation_hook (__ file__, array ("my_plugin", "installa")); Classe my_plugin (installazione della funzione statica () (// Non creare alcun output qui ...))

# 3. Esegui un metodo di classe da un file separato

Se la classe che contiene la funzione di attivazione è in file separato, quindi registrare la funzione di attivazione come segue:

Include_once __dir__. "/class-my_plugin.php"; Register_Activation_Hook (__ file__, array ("my_plugin", "on_activate_function"));

#quattro. Esegui una classe di classe dalla classe

Se sei dentro __construct (). Importante, __file__ dovrebbe "guardare" al file del plugin master:

Register_Activation_Hook (__ file__, array ($ questo, "your_method_name"));

# 5 Crea qualsiasi cosa immediatamente dopo l'attivazione del plugin

Dopo aver attivato il plugin, vengono attivati \u200b\u200bsolo due ganci: attivato_plugin e spegnimento.

Quando è necessario eseguire qualsiasi cosa immediatamente dopo aver attivato il plugin, è possibile allegare la funzione a loro.

Quando questa soluzione non è adatta, è possibile utilizzare le opzioni WP: Salvare i dati sull'opzione e quindi controllare la disponibilità dell'opzione e fare qualcosa se l'opzione è:

// file plug-in principale. ... Funzione my_plugin_activate () () (// Aggiungi un'opzione a quel punto se è fare nulla. ADD_OPTION ("ACTIIN_PLUGIN", "Plugin-Slug"); // qui Codice di attivazione ...) Register_Activation_Hook (__ file__ " my_plugin_activate "); Funzione load_plugin () (se (IS_ADMIN () && GET_OPTION ("ACTIVED_PLUGIN") \u003d\u003d "Plugin-slug") (// rimuovere l'opzione aggiunta in modo che non funzioni più // e fare ciò di cui hai bisogno ... Delete_Option ("Attivato_plugin"); // crea qualsiasi cosa, dopo aver attivato il plug-in // ad esempio: add_action ("init", "my_init_function");)) add_action ("admin_init", "load_plugin");

Un'altra opzione per fare qualcosa durante l'attivazione del plug-in è creare il tuo evento come questo:

Funzione my_plugin_activate () () (// installa il gancio in modo da poter andare dal plugin do_action stesso ("my_plugin_active");) register_activation_hook (__ file__, "my_plugin_active");

# 6 Un'altra dimostrazione di usare la funzione

Un piccolo plugin che dimostra come utilizzare la funzione:

/ * Nome del plug-in: una descrizione del test: un test * / Richiesta_once dirname (__ file__). "/my_other_file.php"; / * Questo codice non funzionerà. Il gancio di attivazione deve essere chiamato dal file principale. Register_Activation_Hook (Dirname (__ file__). "/My_other_file.php", "my_other_function"); * / // Questo è un codice di lavoro. Register_activation_Hook (__ file__, "test_attivated"); / * Questa è l'opzione di annuncio corretta e l'accesso alle variabili globali. Le variabili globali dovrebbero essere dichiarate chiaramente. Senza questo non avrai accesso a loro. * / Global $ qualche_var; $ some_var \u003d "hey"; // Funzione Test_Active () (l'opzione non funzionerà. Se è necessario registrare registri su un file temporaneo, utilizzare fopen / fwrite. Se si desidera controllare se il gancio di attivazione funziona, utilizzare EXIT () all'interno della funzione Gancio. * / Echo "Test_activated ha chiamato!";)

Consente di utilizzare un'impostazione WordPress per più siti contemporaneamente allo stesso tempo. Allo stesso tempo, ogni sito riceve le proprie tabelle nel database con un prefisso unico.

Tabelle con dati degli utenti registrati comuni a tutti i siti di rete. Questo è un certo vantaggio e registrazione di un giorno è possibile accedere a più siti. Inoltre, su ogni sito, lo stesso account potrebbe avere diritti diversi. Ad esempio, su un sito, l'utente può essere l'editor e su un altro amministratore.

In ordinario installazione wordpress. La registrazione, l'autorizzazione e la reimpostazione della password visualizzano il file WP-LOGIN.php.

  • wp-login.php - Autorizzazione
  • wp-login.php? Action \u003d Register - Registrazione
  • wp-login.php? Azione \u003d LostPassword - Reset password

Nella modalità multitei, il kernel di WordPress inizia a comportarsi in qualche modo diversamente e quando si passa al link WP-Login.php? Action \u003d Register riceverà un reindirizzamento su WP-signup.php. Questa è la pagina di registrazione della tua rete, che è predefinita in WordPress.

Oltre a registrare gli account utente ordinari, è possibile creare un nuovo sito su di esso se il superministratore ha abilitato un'opportunità di un'opportunità di rete (Impostazioni di rete).

Nella maggior parte degli argomenti, la pagina di registrazione non sembra molto buona. Molti temi sono utilizzati dai framework CSS, come Bootstrap e le loro classi specifiche per la stilizzazione di diversi elementi sulle pagine, quindi è difficile scrivere un singolo html che sarà adatto a tutti.

Ma non dovresti disperare se la pagina guarda disordinata. Il file wp-signup.php è una grande cosa all'inizio, quando non c'è tempo per elaborare ogni parte 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 campione e un esempio, che è facile da capire lo spettro delle funzioni che WordPress fornisce l'elaborazione e il controllo dei dati inseriti dagli utenti e crea nuovi account.

Rete principale del sito Web

Per impostazione predefinita, Wordpress apre la pagina di registrazione (WP-signup.php) sulla rete principale del dominio (sito Web). Ciononostante, è possibile creare pagine di registrazione per ciascun sito di rete, anche se hanno argomenti.

Considereremo il caso quando un argomento è utilizzato su tutti i siti di rete, ma c'è una pagina di registrazione su ciascuna di esse. I siti differiscono nella lingua (inglese e russo), quindi la pagina di registrazione verrà visualizzata sul sito di lingua "nativo". Se i siti utilizzano argomenti diversi, tutto dipenderà da quali argomenti che si adattano allo stesso layout (una situazione eccellente che può spingerti a unificare tutti i suoi argomenti) o vale la pena elaborare le pagine singolarmente.

Alternativa alle funzioni. PHP.

Ordine nei file

MU-Plugin può contenere un numero qualsiasi di file e una struttura che sembrerà logica per te. Aderire a una tale gerarchia:

| Mu-plugin | | Carico.php |. | Selena-Network | | | Iscriviti |. | | | plugin.php |. | | ... | | | | Jetpack |. | | | plugin.php.

Nel file Load.php, le traduzioni e tutti i "plugin" necessari sono collegati:

// Caricamento dei trasferimenti per mu-plugin load_muplugin_textdomain ("selena_network", "/ selena-network / lingue /"); // funzionale per la pagina di registrazione Richiedi wpmu_plugin_dir. "/selena-network/signup/plugin.php"; // Un altro plugin // Richiedi wpmu_plugin_dir ...

All'interno della directory di Selena-Network, vengono memorizzate le cartelle dei plug-in. Ognuno ha il suo plugin.php, che ci colleghiamo su load.php. Ciò fornisce flessibilità e la capacità di disabilitare immediatamente e includere singoli componenti sul progetto di lavoro in caso di emergenza.

Pagina di registrazione

Avendo capito con dove e come scriveremo il codice, puoi andare alla creazione della pagina di registrazione.

Creare una pagina con un esempio.org/signup/ attraverso l'interfaccia abituale. Come indirizzo, è possibile utilizzare qualsiasi URL che sembrerà adatto al tuo progetto.

Reindirizza alla pagina di registrazione desiderata

A Wordpress riconosciuto sul nostro nuova pagina Registrazione e reindirizzamento su di esso, quando si fa clic sul collegamento "Registrato", utilizzare il filtro WP_SignUp_Location. Può essere trovato all'interno del WP-Login.php ed è lui che è responsabile per il reindirizzamento sul WP-signup.php predefinito.

Caso "Registrati": if (IS_Multisite ()) (WP_REDIRECT (Apply_Fireders ("WP_Signup_Location", Network_site_url ("WP-signup.php"))); Esci; // ...

Come ricordi, per impostazione predefinita, la pagina di registrazione si apre sul dominio principale della rete. Ecco perché network_site_url () è usato qui.

Aggiungi il gestore del filtro a MU-Plugin / Selena-Network / Signup / Plugin.php, che verrà fornito all'indirizzo della pagina di registrazione sul sito corrente:

Funzione selena_network_signup_page ($ URL);) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network - prefisso, che uso nei nomi di tutte le funzioni all'interno del MU-Plugin sul mio sito per evitare conflitti, deve essere sostituito con il proprio prefisso unico. La priorità di aggiungere il filtro 99, poiché alcuni plugin, come BBPress e Buddypress, possono sovrascrivere questo indirizzo ai propri (MU-Plugin vengono caricati prima dei plugin convenzionali, vedere sopra).

Si noti che Home_url () viene utilizzato, che, a differenza di Network_SITE_URL (), fornisce all'indirizzo del sito corrente e non nel sito di rete principale.

Funzionalità wp-signup.php

Il file wp-signup.php contiene un numero elevato di funzioni e codice. Per vedere l'immagine nel suo complesso, puoi usare il codice di piegatura. Di norma, in inglese si chiama "Codice pieghevole".

All'inizio del file da 1 a 80, la linea (nella versione 4.1.1), vengono effettuati vari controlli e che emettono la pagina "Start" utilizzando Get_header ().

Successivamente, molti metodi sono dichiarati e prima di iniziare a lavorare con loro, vale la pena capire cosa rende ogni funzione. Dentro, molti di questi sono spesso utilizzati altre funzioni con il prefisso WPMU_, tutti sono dichiarati nel file WP-include / MS-Functs.php. Questa sezione è difficile da capire senza vedere il codice da solo. Sotto piccola descrizione Funzioni di base nel caso in cui tu abbia difficoltà.

  • wpmu_signup_stylesheet () - Uscita di ulteriori css nella pagina di registrazione.
  • show_blog_form () - Campi per la registrazione del sito (indirizzo, visibilità dei nomi per i motori di ricerca).
  • validate_blog_form () - Controllo dell'indirizzo e dei nomi del sito inseriti utilizzando wpmu_validate_blog_signup ().
  • show_user_form () - Campi per la registrazione dell'utente (login e indirizzo email).
  • validate_user_form () - Controllo del login inserito e indirizzi. Posta con wpmu_validate_user_signup ().
  • signup_another_blog () - Campi per la registrazione di nuovi siti usando show_blog_form () per gli utenti che sono già registrati sul sito.
  • validate_another_blog_signup () - Controlla l'indirizzo del sito e il nome utilizzando validate_blog_form ().
  • signup_User () è la funzione principale per emettere il campo della pagina di registrazione.
  • validate_User_SignUp () - controlla l'accesso e l'indirizzo email. Posta con validate_user_form ().
  • signup_blog () - campi per l'inserimento dell'indirizzo, nome e visibilità del sito (secondo passaggio di registrazione) utilizzando show_blog_form ().
  • validate_blog_signup () - controlla il login, indirizzo email. Posta, indirizzo e nome del sito.

Nella parte inferiore del fondo del file WP-signup.php (da 646 cuciture nella versione 4.1.1), la logica principale della pagina di registrazione, che utilizza i metodi di cui sopra. Questa parte del codice non viene inviata alla funzione. Alla fine, viene chiamato get_footer ().

Copia il funzionario wp-signup.php

Successivamente, la procedura per copiare un wp-signup.php in mu-plug-in verrà descritto e apportando modifiche alla forcella. Potrebbe non sembrare il modo giusto. Invece, puoi scrivere le funzioni da zero per controllare e ottenere moduli utilizzando lezioni, non funzioni convenzionali. A mio parere, il wp-signup.php ha già tutta la logica necessaria per la nostra pagina, rimane solo per apportare modifiche minori.

Quando si aggiorna WordPress, WP-signup.php cambia di volta in volta, ma questo non significa che con ogni versione dovrà sincronizzare il suo "forc". Le funzioni all'interno del wp-signup.php sono essenzialmente impegnate solo solo dall'uscita HTML, dal controllo dei dati, la creazione di account e i siti sono impegnati nel prefisso WPMU_, dichiarato in MS-Functions.php.

Creeremo una funzione che mostrerà il modulo di registrazione sulla pagina. Per fare ciò, copia WP-signup.php da Wordpress Root in MU-Plugings / Selena-Network / Iscriviti /. Collegarlo all'interno di Mu-Pugins / Selena-Network / Signup / Plugin.php).

Richiedere wpmu_plugin_dir. "/selena-network/signup/wp-signup.php";

Elimina tutti richiedono e controlli non necessari fin dall'inizio del file copiato. Nella versione 4.1.1, questo è l'intero codice da 1 a 80 righe.

Ora siamo pronti a creare funzione principale Per visualizzare il modulo di registrazione. Per fare ciò, tutta la logica dalla linea 646 e alla fine del file saremo trasferite alla funzione chiamata selena_network_signup_main. Alla fine, elimini due chiusura non necessarie

(linee 722 e 723), così come la chiamata get_footer ().

Nel recentemente creato selena_network_signup_main () All'inizio, dichiareremo la variabile globale attiva_signup che tutti gli altri metodi da questo file utilizzano. E aggiungi la chiamata evento prima_signup_form, che abbiamo eliminato dall'inizio del file.

Funzione selena_network_signup_main () (globale $ active_signup; do_action ("before_signup_form"); // ...)

Ora rimane solo per cambiare il layout in tutti i luoghi in cui è necessario e la pagina di registrazione è pronta.

Uscita del modulo di registrazione

Ci sono almeno due opzioni qui. Un modo più conveniente per creare una corona corta e posizionarlo sulla pagina attraverso il solito editor.

// Creare un cortometraggio di rete_signup add_shortcode ("Network_signup", "selena_network_signup_main");

La seconda opzione è quella di creare una pagina Page-signup.php nella cartella di tema figlia. Invece della parola "Iscriviti" è possibile utilizzare un ID univoco assegnato alla pagina. All'interno del modello, aggiungere il layout richiesto e creare una selezione selena_network_signup_main () nel posto giusto.

Di conseguenza, la mia pagina di registrazione ha iniziato a sembrare molto meglio e più pulito.

Pagina di attivazione

Per impostazione predefinita, WordPress divide convenzionalmente il processo di registrazione in MultiSite per due passaggi - compilando il modulo sul sito e l'attivazione dell'account quando si accede al link inviato in un'e-mail. Dopo aver compilato il modulo creato nella sezione precedente, WordPress invia una lettera con una piccola istruzione e riferimento per attivare l'account.

Per l'output della pagina di attivazione, il file wp-activate.php viene risolto situato nella directory root wordpress. Wp-activate.php può anche essere completamente modificato. Il processo è simile a ciò che abbiamo già fatto per WP-signup.php.

Creare l'esempio.org/activate / Page tramite l'interfaccia normale. Come indirizzo, utilizzare qualsiasi URL che sembrerà adatto a te.

Copia il file wp-activate.php nei tuoi plugin MU e collegalo a MU-PUGINS / Selena-Network / Signup / Plugin.php.

Richiedere wpmu_plugin_dir. "/selena-network/signup/wp-activate.php";

Dentro, non tanti contenuti, a differenza del wp-signup.php. Il file esegue un'unica operazione: attiva l'account se si ottiene il tasto corretto e visualizza un messaggio di errore o un funzionamento di successo.

Elimina tutti i controlli non necessari e richiedono - da 1 a 69 riga in WordPress 4.1.1. Alla fine, rimuovere la chiamata Get_footer (). I contenuti rimanenti trasferirsi alla funzione selena_network_activate_main ().

È interessante notare che qui prima scarica Wordpress. (Wp-load.php) ha annunciato la costante WP_Installing. La sua presenza provoca Wordpress non caricare i plugin.

Come nel caso della pagina di registrazione, rimane solo per fissare il layout dove è necessario. È inoltre possibile modificare il testo dei messaggi visualizzati (in questo caso, non dimenticare di aggiungere un dominio di testo dei mu-plugin a tutti i traduttori della funzione, non è installato da nessun'altra parte).

La funzione finita può essere utilizzata su una pagina predeterminata attraverso una scorciatoia o un modello separato in una controllata.

Lettere di attivazione con riferimenti corretti

La pagina di attivazione è pronta per funzionare, ma WordPress non lo sa e invia comunque lettere di attivazione con riferimento a wp-activate.php. A differenza del wp-signup.php non c'è filtro, che consentirebbe di modificare l'indirizzo. Invece, è necessario scrivere la tua funzione che invierà lettere con collegamenti corretti.

Al momento del riempimento e invio di un modulo sulla pagina di registrazione Wordpress chiama WPMU_SignUp_ utente.() o wpmu_signup_ blog.() A seconda del tipo di registrazione. Entrambe le funzioni creano una nuova voce nella tabella WP_SignUps lo riempire con il contenuto necessario, tra i quali è presente una chiave di attivazione dell'account.

Dopo, a seconda della funzione, wpmu_signup_ è chiamato utente._Notificazione () o wpmu_signup_ blog._Notificazione (). Entrambe le funzioni hanno funzionalità simili - generano e inviano una lettera con un riferimento di attivazione, ma prendi diversi argomenti. In entrambi i filtri per "intercettazione" degli eventi.

Se (! Apply_Filters ("wpmu_signup_user_nitification", $ utente, $ user_email, key key, $ meta)) restituisce false;

Per attivare i conti con la creazione del blog:

If (! Apply_Filters ("wpmu_signup_blog_nitification", $ dominio, $ percorso, $ Titolo, $ utente, $ user_email, $ key, $ meta)) (return false;)

Rimane solo per scrivere i tuoi gestori all'interno del quale si invia lettere tramite WP_mail () e alla fine necessariamente per dare false in modo che Wordpress non invia una lettera di attivazione due volte - una delle tue, un'altra - lettera per impostazione predefinita con un collegamento a Wp-activate.php.

Funzione selena_network_wpmu_signup_user_nitificazione ($ utente, $ user_email, key key, $ meta \u003d array ()) (// Genera un intestazione, testo e intestazioni di lettere // ... // invia una lettera o aggiungere un compito di cron da inviare una lettera Wp_mail ($ user_email, wp_specialchars_decode ($ soggetto), $ message, $ message); // recupera false in modo che Wordpress non invia una lettera di attivazione due volte return false;) add_filter ("wpmu_signup_uver_nitification", "selena_network_wpmu_signup_user_nitification", 10, 4) ;

Se invii lettere attraverso il server SMTP o il numero di registrazioni è molto grande, dovresti pensare a non inviare lettere all'istante. Invece, puoi aggiungere attività di cron utilizzando WordPress Cron.

Chiudi Accesso a WP-signup.php e wp-activate.php

Avendo creato le proprie pagine di registrazione e attivazione, potrebbe essere necessario chiudere gli "originali". Ad esempio, se nella pagina di registrazione c'è campi aggiuntiviQuesto deve essere compilato. Inoltre, molti siti di wordpress sono esposti alle registrazioni di spam.

Risolvi due problemi con un'azione può essere chiesto a Apache a dare 404 in caso di tentare di aprire queste pagine. Per fare questo, devi solo registrare una coppia di ulteriore riscrittura al tuo file di configurazione o.htaccess.

Rewriteengine su RewriteBase / # conoscenza espressioni regolari non sarà mai superfluo :) Rewriterule ^ wp-signup \\ .php - Rewriterle ^ wp-attiva \\ .php - # Inizia Wordpress # Regole da Wordpress per impostazione predefinita Non toccare :) # ... # fine wordpress

Conclusione

Per questo e molti altri "problemi" associati a WordPress su Internet ci sono molte soluzioni. Ad esempio, per creare pagine di registrazione e attivazione, alcune sono offerte per riscrivere l'originale wp-signup.php e wp-activate.php. Questo non dovrebbe essere fatto perché nel caso dell'aggiornamento WordPress, perderai tutte le modifiche apportate ai file, e non è possibile verificare l'integrità del kernel utilizzando.

Quando lo sviluppo di qualsiasi aggiunta, argomenti o soluzioni dovrebbe essere speso un po 'di tempo per affrontare ciò che sta accadendo all'interno di WordPress. Ci sono molti utili strumenti di debug per questo.

P.S.

Per assegnare automaticamente diversi ruoli, i nuovi utenti possono utilizzare il plug-in multiuso per l'utente.

Se avete domande o difficoltà durante la creazione di pagine di registrazione e attivazione dopo aver letto l'articolo, lascia un commento e risponderemo.

27.03.2015 27.03.2015

Sviluppatore WordPress. Ama l'ordine in tutto e si occupa di nuovi strumenti. Ispirato all'architettura dei componenti symfony.

  • La campana.

    Ci sono quelli che hanno letto questa notizia prima di te.
    Iscriviti per ricevere articoli freschi.
    E-mail
    Nome
    Cognome
    Come vuoi leggere la campana
    Senza spam.