La cloche.

Il y a ceux qui ont lu cette nouvelle devant vous.
Abonnez-vous pour recevoir des articles frais.
E-mail
Nom
Nom de famille
Comment voulez-vous lire la cloche
Sans spam

liens jetables peuvent être utilisés dans une variété de situations: afin de fournir un accès temporaire au fichier ou une page, ou pour confirmer votre inscription. Dans cette leçon, nous montrerons comment générer et mettre en œuvre des adresses URL jetables.

Créer une URL

Supposons que notre site ait un système d'authentification de l'utilisateur. Après l'enregistrement, nous demandons à l'utilisateur de passer la procédure de vérification des e-mails. Pour créer de tels liens, nous pouvons utiliser le paramètre spécial de jeton. Un exemple d'un tel lien:

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

Sans une base de données, nous ne pouvons pas le faire ici, donc regardons la table avec laquelle nous travaillerons.

CREATE TABLE PENDING_USERS (TOKEN CHAR (40) NOT NULL, UserName Varchar (45) Non nul, tstamp Entier Unsigned Non nul, clé primaire (jeton);

Dans la table, nous stockons 3 champs: jeton, nom d'utilisateur et heure. Pour générer un jeton, nous utiliserons la fonction SHA1 (), qui donne une chaîne de 40 caractères. Le champ tstamp enregistre le temps de génération de jetons afin que nous puissions suivre les liens avec un outdier.

Il y a plusieurs façons de générer un jeton, mais dans cette leçon nous allons utiliser les fonctions UNIQID () et SHA1 (). Indépendamment de la méthode de génération d'un jeton, assurez-vous que les valeurs générées seront différentes et que la probabilité de duplicata est minimale.

$ Jeton \u003d SHA1 (UNIQID (UserName $, True));

En tant que paramètre, la fonction uniqid () prend la corde, et dont la sortie fournit un identifiant unique sur la base de l'argument transmis et l'heure courante. Aussi, en tant que deuxième argument, cette fonctionnalité Accepte une valeur booléenne que l'UNIQID ajoutera quelques caractères supplémentaires pour augmenter la probabilité de la particularité de la valeur. La fonction SHA1 prend un identifiant unique et crée un hachage.

Après avoir travaillé sur deux fonctions, nous aurons un jeton unique qui peut utiliser pour générer des adresses d'URL. Maintenant, nous devons la mettre dans la base de données:

$ Requérant \u003d $ DB-\u003e préparer ("insérer dans des valeurs de jeton (nom d'utilisateur, jeton, ttstamp) (?,?)"); $ Query-\u003e Exécuter (Array (Nom d'utilisateur $, $ Token, $ _Server ["demande_time"]));

Pour que nous sachions quel utilisateur doit être activé, nous allons enregistrer et vous connecter à la table. Dans un exemple, plus adapté à un site Web réel, vous pouvez utiliser l'ID utilisateur.

Maintenant que nous avons tous les informations nécessaires, Nous pouvons créer une adresse d'URL temporaire:

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

$ Message \u003d.<<

Vérifier

Maintenant, nous avons besoin d'un script, grâce à laquelle nous allons vérifier. Tout ce que nous devons faire est de comparer le jeton de l'adresse de l'URL et du jeton de la base. S'il y a une telle chose et que l'heure de sa vie n'a pas expiré, tout va bien.

// Obtenez si jeton (Isset ($ _ obtenir ["jeton"]) && preg_match ("/ ^ (40) $ / i", $ _GET ["jeton"])) ($ Token \u003d $ _GET ["jeton" ];) Ailleurs (jeter une nouvelle exception ("Tocken n'est pas valide."););) // Vérification $ Query \u003d $ DB-\u003e Préparer le nom d'utilisateur ("Sélectionnez Nom d'utilisateur, Tstamp auprès de penders \u003d?"); $ Query-\u003e Execute (tableau ($ Token)); $ ligne \u003d $ Query-\u003e Fetch (PDO :: FETCH_ASSOC); $ Query-\u003e Closecursor (); Si ($ rangée) (extrait ($ ligne);) d'autre (lancer une nouvelle exception ("tocken n'est pas valide."););););););););););););) // Activez le compte d'utilisateur //// retirez le jeton de la base $ \u003d $ Db\u003e préparer ("Supprimer des pendersistes où nom d'utilisateur \u003d? Et jeton \u003d? Et ttstamp \u003d?",); $ Query-\u003e Exécuter (Array (Nom d'utilisateur $, $ Token, $ TSTAMP));

Nous devons également effectuer des tests de jetons, dont la durée de vie a expiré:

// 1 jour en secondes \u003d 60 secondes * 60 minutes * 24 heures $ Delta \u003d 86400; // Vérifiez si ($ _server ["request_time"] - $ TSTAMP\u003e $ delta) (lancer une nouvelle exception ("TOCKEN Lifetime expiré.");) // Activer le compte personnalisé // ...

Ainsi, nous aurons deux chèques: une sur la validité du jeton, l'autre au moment de son existence.

Résultat

Cette méthode peut être appliquée non seulement pour activer comptes Les utilisateurs, mais aussi dans d'autres besoins: par exemple, pour fournir un accès unique ou temporaire à une ressource ou à un service.

En plus de tout cela, vous pouvez créer un script qui supprimera les jetons qui n'ont jamais utilisé. Ce script peut être lancé de temps à autre ou s'appliquer à ce cron.

Les sujets ne sont généralement pas fonctionnels, mais parfois, des développeurs, vous devez introduire certaines possibilités dans notre sujet pour le rendre un peu mieux et plus pratique.

Dans ce guide, nous examinerons le terme "territoire de plugins", ainsi que pour apprendre à utiliser un outil fantastique écrit par Thomas Griffin: Bibliothèque d'activation du plug-in TGM.

Fonctionnalité du sujet: Invasion sur le territoire des plugins

Les thèmes sont conçus pour modifier la conception du site Web WordPress. Idéalement, le sujet ne devrait affecter que l'aspect visuel. Cependant, dans notre WordPress "Golden Age", les développeurs plug-ins incluent souvent des fonctionnalités fonctionnelles dans leurs sujets qui vous permettent de conserver la compétitivité sur le marché.

C'est l'invasion du territoire des plugins. Nous pouvons présenter le "territoire des plugins" comme des sections fonctionnelles du code. Toute prise de code modifiant la fonctionnalité de votre site doit être représentée sous forme de plugin si le code spécifié n'est pas posé dans le noyau WordPress.

J'ai déjà formulé précédemment dans l'un de mes articles une règle empirique "Plugins de territoire:

Si la particularité est liée à la représentation visuelle du site, alors dans ce cas, il devrait être inclus dans le sujet; S'il est associé à la fonctionnalité, il doit être représenté comme un plug-in distinct.

Règle assez simple. Les gens essaient toujours de s'inscrire au niveau des fragments fonctionnels de code dans leurs sujets, mais les catalogues de thèmes (tels que WordPress.org ou ThereForest) ne prennent pas de thèmes qui envahissent le territoire des plugins. Ainsi, la proposition de fonctionnalité dans les thèmes est devenue un certain problème.

Heureusement, il existe une solution simple qui ne va pas à l'encontre de la règle du "territoire des plugins".

Introduction à la bibliothèque d'activation du plugin TGM

Définition de l'activation du plugin TGM

Faites attention à la fonction TGMPA () avec deux paramètres à la toute fin du code. Le deuxième paramètre est la variable $ config, qui est également une matrice, comme $ plugins. Comme suit son nom, vous pouvez configurer la bibliothèque d'activation du plugin TGM à l'aide de de ce massif. La variable accepte son propre ensemble d'options:

  • iD (String) est un identifiant unique pour la bibliothèque d'activation du plug-in TGM dans votre sujet. Ceci est très important: si d'autres plugins utilisent également une activation du plug-in TGM, différents identifiants éviteront d'éventuels conflits.
  • default_Path (String) - Un chemin absolu par défaut pour les plug-ins dans votre sujet. Lorsque vous l'installez, vous pouvez utiliser le nom du fichier ZIP comme valeur du paramètre source de votre plug-in.
  • menu (String) - Menu Menu pour Installer des plug-ins.
  • hAS_NOTISS (Boolean) - Si spécifié dans TRUE, les notifications administratives seront émises pour les plug-ins requis / recommandés.
  • conservible (Boolean) - Si spécifié dans TRUE, l'utilisateur peut "fermer" les notifications.
  • démissionnement_msg (String) - Si l'option congréable est définie sur FALSE, ce message sera affiché au-dessus de la notification de l'administrateur.
  • iS_Automatic (Boolean) - Si spécifié dans TRUE, les plugins seront activés après que l'utilisateur accepte de les installer.
  • message (String) - HTML supplémentaire, affiché devant le tableau de plug-in.
  • strings (tableau) - un tableau qui comprend des messages affichés. Vous pouvez les définir comme lignes de diffusion. Regardez le fichier exemple.php pour voir liste complète Tous les messages.
"Mythème-tgmpa", // votre ID TGMPA unique "Default_Path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /", // chemin absolu de défaut "menu" \u003d\u003e "mythème-install-requis-plugins", // limace de menu "has_notices" \u003d\u003e true, // Afficher les notices administratives "renvoyable" \u003d\u003e false , // Les avis ne sont pas licenciables "rejeter_msg" \u003d\u003e "Je n'ai vraiment pas besoin de vous pour installer ces plugins, d'accord?", // Ce message sera sorti en haut de NAG "IS_Automatic" \u003d\u003e true, // automatiquement Activer les plugins après l'installation "Message" \u003d\u003e "", // Message à la sortie juste avant la table des plugins" Strings "\u003d\u003e Array (); // Le tableau des chaînes de message que les utilisations de l'activation de plug-in TGM utilisent);?\u003e

Conclusion

Comme vous pouvez le constater, suggérez des fonctionnalités dans thèmes WordPress. Peut-être - il vous suffit de penser d'abord aux utilisateurs qui peuvent passer d'un sujet à un autre. La bibliothèque d'activation du plug-in TGM offre une manière très intelligente pour cela.

Que pensez-vous de cet outil? Avez-vous déjà utilisé cela, prévoyez-vous l'utiliser à l'avenir? Partage tes pensées!

Créez votre propre page d'enregistrement pour Multisite au lieu de standard WP-Signup.php.

Dans l'installation habituelle Page WordPress Inscription (autorisation, réinitialisation du mot de passe) Affiche le fichier WP-LOGIN.PHP.

  • /wp-login.php - Autorisation
  • /wp-login.php?Action\u003dregister - Inscription
  • /wp-login.php?Action\u003dLostPassword - Réinitialisation du mot de passe

Pour les multisites dans WP-Login.php, il existe des conditions distinctes. Donc, lorsque vous cliquez sur le lien /wp-login.php?Action\u003dregister sur MultisAite, WordPress effectuera une redirection à la page /wp-signup.php. Dans de nombreux sujets, la page ne semble pas très attrayante, nous ferons donc la nôtre.

Réseau de sites Web principaux

Par défaut, WordPress ouvre la page d'inscription (WP-Signup.php) sur le réseau de domaine principal (site web). Cependant, vous pouvez faire une page d'enregistrement distincte pour chaque site de réseau, même si elles ont des sujets différents. Nous examinerons le cas lorsque sur tous les sites du réseau ont sa propre page d'inscription, mais le même sujet est utilisé et les sites ne diffèrent que dans la langue. Si des sujets différents sont utilisés, vous devrez écrire plus de code.

fonctions.php?

Pas. Le nom de ce fichier semble être mentionné dans n'importe quel article sur WordPress. Dans notre cas, en tenant compte du fait que la fonctionnalité d'enregistrement est conçue pour plusieurs sites, il est logique de prendre en Mu-plugins qui sont chargés lors de l'ouverture un site.

Digression lyrique

Il convient de noter que les plugins MU sont chargés plus tôt que les plugins ordinaires et jusqu'à ce que le noyau WordPress soit entièrement chargé, l'appel de certaines fonctions peut permettre de conduire à bugs fatals en php. Le téléchargement similaire "précoce" a ses avantages. Let dire de l'intérieur un thème ne peut être accrocher à une action qui est déclenchée avant de télécharger le fichier functions.php du sujet. Un exemple de cela peut servir JetPack_Module_loaded_Related-messages plugin (associés-messages - le nom du module) avec lequel il est possible de suivre l'activité des modules Jetpack. Il est impossible de « embrayage » du fichier de sujet à cette action, parce que l'action a déjà travaillé avant de charger le sujet - les plugins sont chargés plus tôt. Vous pouvez jeter un coup d'œil à la photo courante de l'ordre de démarrage WordPress sur la page de référence d'action dans le code.

Commande dans les fichiers

MU-plugins peut contenir n'importe quel nombre de fichiers et de tout graphique, qui vous semblera logique. Je m'adresse à une telle hiérarchie:

| Plugins--MU | - | load.php | - | - | Selena-Réseau | - | - | - | - -signup | - | - | - | - | --plugin.php | - | - | - | - | -... | - | - | - | -Jetpack | - | - | - | - | - | - -plugin.php

Dans le fichier LOAD.PHP, tous les "plugins" nécessaires sont connectés à notre réseau:

CHARGE TRASLATES POUR TOUS ADDONS LOAD_MUPLUGIN_TEXTDOMAIN ( "Selena_Network", "/ Selena-Réseau / Langues /"); // Inscription réseau nécessite WPMU_PLUGIN_DIR. "/Selena-network/signup/plugin.php"; // Un autre plug-ins // nécessite WPMU_PLUGIN_DIR ...

A l'intérieur du dossier Selena-réseau, plug-in dossiers sont stockés, chacun a sa propre plugin.php que nous connectons sur Load.php. Il donne une flexibilité et la capacité de désactiver rapidement et d'inclure certaines choses.

Adresse de la page d'inscription

Pour spécifier l'adresse de la page d'enregistrement, utilisez le filtre WP_Signup_Location. Il peut être trouvé dans le fichier wp-login.php et c'est lui qui est responsable de la redirection sur le WP-Signup.php.

Cas "registre": si (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location", réseau_site_url ("WP-Signup.php"))); quitter;

Ajoutez votre fonctionnalité dans MU-Plugins / Selena-Network / Signup / Plugin.php, qui donnera l'adresse de la page d'enregistrement sur le site Web actuel:

Fonction Selena_Network_signup_Page ($ URL) (retour home_url (). "/ Inscription /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_Network - Préfixe, que j'utilise dans les noms de toutes les fonctions à l'intérieur des plugins MU sur mon site pour éviter les conflits, doit être remplacé par son préfixe unique. La priorité de l'ajout de filtre 99, car certaines plug-ins, telles que BbPress et BuddyPress, peuvent écraser cette adresse à vous-même (les plugins MU sont chargés plus tôt que les plugins conventionnels, voir ci-dessus). Veuillez noter que home_url () est utilisé, au lieu de Network_Site_url (), de quitter le visiteur sur le même domaine. Vous pouvez utiliser n'importe quelle URL comme adresse.

Créer une page

Maintenant crée une page avec site.com/signup/ via une interface régulière et dans le modèle de dossier de la fille-sujet pour notre nouvelle page - page-Signup.php. Au lieu du mot "Signup", vous pouvez utiliser un identifiant unique.

Dans le nouveau modèle, vous devez appeler la fonction selena_network_signup_main (), qui affichera le formulaire d'inscription.

Il convient de noter que l'ensemble du processus avec des modèles n'est pas requis et que vous pouvez créer votre propre code abrégé, qui appellera également la fonction Selena_Network_signup_Main ().

wp -ignup.php et wp-activer.php

Nous allons maintenant créer une fonction qui affichera le formulaire d'inscription. Pour ce faire, copiez les fichiers WP-Signup.php et wp-activate.php de la racine WordPress dans MU-Buchers / Selena-Network / Inscription / (et n'oubliez pas de les connecter à l'intérieur de Mu-Plugins / Selena-Network / Signup / plugin.php). D'autres manipulations avec des fichiers sont extrêmement difficiles et difficiles à décrire, alors venez de les faire vous-même. Je ne décrirai que ce qui doit être fait et publier exactement les fichiers source de votre projet:

  1. Au début du fichier, supprimez toutes les fonctions d'appel et d'autres fonctions extérieures du code.
  2. Renommez toutes les fonctions en ajoutant des préfixes uniques aux noms.
  3. La partie inférieure du code WP-Signup.php est enveloppée dans la fonction selena_network_signup_main et au tout début d'écrire global $ active_signup; .
  4. Remplacer la mise en page par vous-même aux bons endroits.

Inside WP-Activer.php Vous devez faire à peu près la même chose:

  1. Supprimer toutes les fonctions extérieures du code, enveloppez la mise en page dans une fonction distincte.
  2. Changer la mise en page dans des endroits où il est nécessaire.

Le fichier WP-activate.php est responsable de la page d'activation de compte. Comme avec la page d'enregistrement, vous devez créer un modèle distinct à l'intérieur duquel appeler une fonction à partir du fichier WP-activate.php.

Nous envoyons les lettres d'activation

La page d'enregistrement envoie une lettre au visiteur en référence à l'activation du compte. Par défaut, il s'agit de la fonction wpmu_signup_user_notification () du fichier ms-fonctions.php. Sa fonctionnalité peut être empruntée pour sa fonction. La raison pour laquelle vous souhaitez refuser d'utiliser cette fonction - il envoie une référence d'activation de compte avec WP-Activate.php. Vous pouvez désactiver cette fonctionnalité à l'aide du filtre WPMU_SIGNUP_USER_NOTIFICATION en déplaçant le faux sur celui-ci (si cela ne doit pas faire, la lettre d'activation sera envoyée deux fois, l'accord, en fait deux lettres différentes).

Fonction munymyofselenagomez_wpmu_signup_user_notination_notification ($ utilisateur, $ user_mail, $ clé, $ méta \u003d tableau ()) (// ... // code à partir de la fonction wp_mail ($ user_email, wp_specialchars_decode ($ sujet), $ message, $ message_mail ); Retour false;) add_filter ("wpmu_signup_user_notification", "armyofselupenagomez_wpmu_signup_user_notification", 10, 4);

En conséquence, la page d'enregistrement dans le sujet de Selena a commencé à sembler beaucoup plus propre et prudente.

Conclusion

Sur Internet, beaucoup d'autres ne sont pas très de bonne manière Comment faire la même chose - Apache Redirects, Ajax-Forms qui ne fonctionneront pas sans script Java, etc. Je n'ai vraiment pas vraiment aimé cela, alors j'ai essayé de le faire très correctement sur mon propre site.

Je note que les fichiers d'édition doivent être capables de ne pas s'éloigner de la source sur le RankNesh, si WordPress modifie les fichiers WP-Signup.PHP et WP-Activate.PHP, ils étaient plus faciles à les comparer à trouver des modifications. .

N'oubliez pas de regarder la source Toutes les fonctions décrites ci-dessus afin de traiter pleinement quoi et ce qui se passe à l'intérieur du code.

Prime. Protection contre les spammeurs

Même les plus jeunes sites de WordPress sont souvent soumis à un enregistrement de spam. Vous pouvez écrire des conditions sans fin pour filtrer les robots, souvent plus similaires à essayer de créer intelligence artificielle Dans le cas d'un multisite, une redirection régulière à Apache m'a aidé, avec laquelle lors de l'ouverture /wp-signup.php et /wp-acitvate.php, j'ai demandé à émettre 404 (je ne suis pas un expert de configuration Apache, donc mon Les règles peuvent ne pas être très correctes).

RewriteEngine sur rewritebase / rewrétrule ^ WP-Signup \\ .php - Rewriterule ^ wp-activer \\ .php - # Commencer WordPress # Règles de WordPress par défaut Ne touchez pas :) # # # End WordPress

P. S. J'essaie de décrire des choses tierces aussi en détail que possible, car quand j'ai commencé, parfois, il était d'une certaine manière de dire et d'expliquer beaucoup de choses. Je crois également que des petits conseils similaires sur d'autres matériaux, une personne sera poussée à l'étude de quelque chose de nouveau et à élargir leur domaine de la connaissance. Les expressions régulières sont utilisées dans les enregistrements Reriterule, ils ne sont pas complètement complexes, par exemple, le symbole ^ signifie le début de la ligne.

Registre une fonction qui sera déclenchée lors de l'activation du plugin.

Cette fonctionnalité attache la fonction de rappel spécifiée au crochet d'activate_ (plug-in) et est une enveloppe pour ce crochet.

(Plugin) dans le crochet Activate_ (Plugin) est remplacé par le nom du relativement autorisant le fichier plug-in principal. Par exemple, si le plugin est situé: WP-Contenu / Plugins / SamplePlugin / Sample.php, le nom du crochet sera le suivant: Activate_sampleplugin / Sample.php.

À partir de la version 3.1. Crochet ne fonctionne que pendant l'activation du plugin et ne fonctionne pas pendant mise à jour automatique brancher.

Comment ça fonctionne

Le plugin est activé par la fonction Activate_Plugin () dans laquelle le crochet Activate_ (plug-in) est déclenché.

La fonction Activate_Plugin () dans le noyau est déjà invoquée après avoir chargé le VP moyen. Cette fonction connecte le fichier de plug-in maître (et tout cela est spécifié dedans), puis via un crochet active la fonction de rappel spécifiée. En raison de cela, toutes les fonctions et classes du plug-in sont disponibles dans notre fonction de rappel. Mais, étant donné que tous les crochets principaux du WP ont déjà fonctionné pendant la botte EN MOYENNE, aucun événement de plug-in n'est accroché à des crochets, par exemple plugins_loaded, ne fonctionne plus lors de la connexion du fichier principal du plug-in. Donc, notre plugin sera connecté, mais pas complètement: non comme il se connecte lorsqu'il est déjà activé.

Par exemple, si le plugin rend quoi que ce soit pendant les plugins de l'événement, alors toutes ces actions ne se produiront tout simplement pas lorsque l'activation du plug-in. Par exemple, s'il connecte le fichier de traduction, le fichier de traduction ne sera pas connecté pour déclencher la fonction de rappel spécifiée pour enregistrer_activation_hook ().

En règle générale, après la déclenchement de la fonction de rappel, il existe 2 événements pour accrocher les fonctions: activé_plugin et arrêt.

Pour faire quelque chose d'extraordinaire lorsque le plugin est activé, voir Exemple 5.

Conditions d'utilisation

La fonction ne fonctionnera pas si vous l'appelez au moment du crochet, par exemple, plugins_loaded, init. La fonction doit être appelée directement à partir du fichier principal du plug-in. Règles d'activation:

    register_ACTIVATION_HOOK () doit être appelé à partir du fichier de plug-in maître, à partir duquel se trouve la directive du nom du plug-in: ... et ne doit pas être appelé à partir de n'importe quel crochet, comme des plugins_loaded ou init.

    La fonction Crochet doit être dans le même fichier que Crochet ou connecter à l'avance à partir d'un autre fichier.

    La fonction du crochet ne fonctionne pas sur l'écran (ECHO). Parce que la redirection et l'écho ont lieu. Mais vous pouvez utiliser ma dé ().

  1. Les variables globales (le cas échéant) doivent être déterminées explicitement pour y accéder de la fonction de crochet.

Notes sur la zone de variables

Lors de l'activation du plugin, le fichier plug-in principal n'est pas connecté dans la zone globale, mais à l'intérieur de la fonction Activate_Plugin (). Donc, variables qui comme mode habituel Le travail du plugin est considéré comme global, ne sera pas global.

Ainsi, la fonction utilisée dans register_activation_hook () peut ne pas voir des variables globales, même si vous les avez déclarées comme globales à l'intérieur de cette fonction. Exemple:

$ Myvar \u003d "quelque chose"; register_activation_hook (__ file__, "myplugin_activate"); Fonction MyPlugin_Active () (GLOBAL $ MYVAR; ECHO $ \u200b\u200bMYVAR; // La variable n'est pas égale à "quelque chose")

En raison de cette fonctionnalité, les variables globales doivent toujours être spécifiées. Toutes les variables globales doivent être définies comme globales, même si la variable est indiquée dans le corps du plug-in. Ce n'est que dans ce cas, seul leur sera accès n'importe où. Exemple:

Global $ myvar; // indique clairement qu'il s'agit d'une variable globale $ myvar \u003d "quelque chose"; register_activation_hook (__ file__, "myplugin_activate"); Fonction MyPlugin_Active () (GLOBAL $ MYVAR; ECHO $ \u200b\u200bMYVAR; //\u003e quelque chose)

Pas de crochets.

Retour

nUL. Rien ne revient.

Utilisant

registre_activation_hook ($ file, $ fonction); $ dossier. (string) (obligatoire) La voie à la chose principale fichier php. Plugin comprenant le nom du plugin lui-même. Généralement utilisé la constante magique PHP __FILE__. $ Fonction. (Ligne / Array / Lambda) (Obligatoire)

Nom de la fonction de rappel. Pour les classes, utilisez un tableau: tableau ($ ceci, "Nom de la fonction"); .

La fonction recevra une variable logique $ Network_wide - si le plugin est activé pour l'ensemble du réseau de sites, avec MultisAite.

Exemples

#une. Exécution d'une fonction lors de l'activation du plugin

Nous supposons que nous avons une fonction my_plugin_activate () dans le fichier de plugin principal: WP-Contenu / Plugins / MyPlugin / MyPlugin.php, puis pour démarrer cette fonction lors de l'activation du plugin, utilisez un tel code:

Register_activation_hook (__ file__, "my_plugin_active"); Fonction mon_plugin_activate () (// code d'activation ...)

# 2. Démarrer une méthode de classe

Si le plugin utilise la classe PHP, le code d'activation est ajouté comme suit:

Register_activation_hook (__ file__, tableau ("my_plugin", "installer")); Classe My_Plugin (Installation de la fonction statique () (// Ne crée aucune sortie ici ...))

# 3. Exécuter une méthode de classe à partir d'un fichier séparé

Si la classe contenant la fonction d'activation est dans fichier séparé, puis enregistrez la fonction d'activation comme suit:

Inclus_once __Dir__. "/class-my_plugin.php"; register_activation_hook (__ file__, tableau ("my_plugin", "on_activate_function"));

#four. Exécuter une classe de cours de la classe

Si vous êtes à l'intérieur __Construction (). Important, __file__ devrait "regarder" au fichier de plug-in maître:

Registre_activation_hook (__ file__, tableau ($ ceci, "y VOTRE_METHOD_NAME"));

# 5 Faites n'importe quoi immédiatement après l'activation du plugin

Après avoir activé le plugin, seuls deux crochets sont déclenchés: activé_plugin et arrêt.

Lorsque vous devez faire quelque chose immédiatement après activation du plugin, vous pouvez leur attacher la fonction.

Lorsque cette solution ne convient pas, vous pouvez utiliser les options WP: enregistrer les données à l'option, puis vérifier la disponibilité de l'option et faire quelque chose si l'option est:

// fichier de plug-in principal. ... Fonction my_plugin_activate () (// Ajoutez une option à ce moment-là s'il doit faire n'importe quoi. add_option ("activé_plugin", "plugin-slug"); // Code d'activation ...) registre_activation_hook (__ file__, " my_plugin_activate "); Fonction load_plugin () (si (is_admin () && get_option ("activé_plugin") \u003d\u003d "plugin-slug") (// Supprimez l'option ajoutée de sorte qu'elle ne fonctionne plus // et faites ce dont vous avez besoin ... DELLETE_OPTION ("Activé_plugin"); // Faire n'importe quoi une fois, après avoir activé le plug-in // par exemple: add_action ("init", "my_init_function");)) Ajouter ("admin_init", "LOAD_PLUGIN");

Une autre option pour faire quelque chose lors de l'activation du plug-in consiste à créer votre propre événement comme celui-ci:

Fonction mon_plugin_activate () (// Installez votre crochet afin que vous puissiez y accéder à partir du plugin DO_ACTION elle-même ("my_plugin_active");) registre_activation_hook (__ file__, "my_plugin_active");

# 6 Une autre démonstration d'utilisation de la fonction

Un petit plug-in démontrant comment utiliser la fonction:

/ * Nom du plug-in: Description du test: Un test * / require_once_once Dirname (__ Fichier__). "/my_other_file.php"; / * Ce code ne fonctionnera pas. Le crochet d'activation doit être appelé à partir du fichier principal. Register_activation_hook (dirname (__ file__). "/My_other_file.php", "my_other_function"); * / // Ceci est un code de travail. Register_activation_hook (__ file__, "test_activé"); / * Ceci est la bonne option d'annonce et l'accès aux variables globales. Les variables globales doivent être déclarées clairement. Sans cela, vous n'aurez pas accès à eux. * / global $ Quelqu'unvar; $ Quelqu'unvar \u003d "hey"; // Fonction Test_Active () (L'option ne fonctionnera pas. Si vous avez besoin de journaux enregistrement dans un fichier temporaire, utilisez fopen / FWRITE. Si vous voulez vérifier si le crochet des travaux d'activation, utilisez EXIT () dans la fonction crochet. * / Écho "test_activé appelé!";)

Vous permet d'utiliser un paramètre WordPress pour plusieurs sites en même temps. Dans le même temps, chaque site reçoit ses propres tables dans la base de données avec un préfixe unique.

Tables contenant des données des utilisateurs enregistrés communes à tous les sites de réseau. Il s'agit d'un certain plus et d'enregistrer un jour que vous pouvez accéder à plusieurs sites. De plus, sur chaque site, le même compte peut avoir des droits différents. Par exemple, sur un site, l'utilisateur peut être l'éditeur et sur un autre administrateur.

Ordinaire installation WordPress. L'enregistrement, l'autorisation et la réinitialisation du mot de passe affichent le fichier wp-login.php.

  • wP-LOGIN.PHP - Autorisation
  • wp-login.php? Action \u003d registre - inscription
  • wp-login.php? Action \u003d lutpassword - réinitialisation du mot de passe

En mode multisite, le démarrage du noyau de WordPress à se comporter différemment et lors du passage à la liaison WP-login.php? Action \u003d register recevront une redirection sur WP-Signup.php. Ceci est la page d'enregistrement de votre réseau, qui est par défaut dans WordPress.

En plus d'enregistrer des comptes d'utilisateurs ordinaires, vous pouvez créer un nouveau site si le Superministrator a activé une telle opportunité dans les paramètres réseau (paramètres réseau).

Dans la plupart des sujets, la page d'enregistrement n'a pas l'air très bien. De nombreux thèmes sont utilisés par les cadres CSS, tels que Bootstrap, et leurs propres classes spécifiques pour la stylisation de différents éléments sur les pages, il est donc difficile d'écrire un seul HTML qui conviendra à tout le monde.

Mais vous ne devriez pas désespérer si la page a l'air désordonnée. Le fichier WP-Signup.php est une excellente chose au début, quand il n'y a pas de temps pour élaborer chaque partie du site - vous pouvez vous concentrer sur d'autres pages plus importantes et plus importantes.

Lorsque vous êtes prêt à faire votre propre page d'inscription, WP-Signup.php sera un bon exemple et un exemple, qui est facile à comprendre le spectre des fonctions que WordPress prévoit le traitement et la vérification des données saisies par les utilisateurs et créer de nouveaux comptes.

Réseau de sites Web principaux

Par défaut, WordPress ouvre la page d'enregistrement (WP-Signup.php) sur le réseau principal du domaine (site Web). Néanmoins, vous pouvez créer des pages d'enregistrement pour chaque site de réseau, même si elles ont des sujets.

Nous examinerons le cas lorsqu'un sujet est utilisé sur tous les sites de réseau, mais il existe une page d'enregistrement sur chacune d'elles. Les sites diffèrent dans la langue (anglais et russe), la page d'enregistrement sera donc affichée sur le site de langue «natif». Si les sites utilisent différents sujets, tout dépendra des sujets qui leur conviennent la même disposition (une excellente situation qui peut vous pousser à unifier tous ses sujets) ou il fonctionne vaut les pages individuellement.

Alternative aux fonctions.php.

Commande dans les fichiers

MU-Plugins peut contenir n'importe quel nombre de fichiers et une structure qui vous semblera logique. Je m'adresse à une telle hiérarchie:

| Mu-plugins | | Load.php | | Selena-Network | | | Signup | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php.

Dans le fichier LOAD.PHP, les traductions et tous les "plugins" nécessaires sont connectés:

// Chargement de transferts pour MU-plugins load_muplugin_textDomain ("Selena_Network", "/ Selena-Network / Langues /"); // Fonctionnel pour la page d'enregistrement nécessite WPMU_PLUGIN_DIR. "/Selena-network/signup/plugin.php"; // Un autre plugin // nécessite wpmu_plugin_dir ...

Dans le répertoire de Selena-réseau, les dossiers à plug-in sont stockés. Chacun a son propre plugin.php, que nous connectons sur load.php. Cela donne une flexibilité et la capacité de désactiver instantanément et d'inclure des composants individuels sur le projet de travail en cas d'urgence.

Page d'enregistrement

Compte tenu avec où et comment nous écrirons du code, vous pouvez vous rendre à la création de la page d'enregistrement.

Créez une page avec un exemple.org/signup/ via l'interface habituelle. En guise d'adresse, vous pouvez utiliser n'importe quelle URL qui semblera approprié pour votre projet.

Rediriger la page d'enregistrement souhaitée

À WordPress reconnu sur notre nouvelle page Enregistrement et a créé une redirection, en cliquant sur le lien "Enregistrement", utilisez le filtre WP_Signup_Location. On peut le trouver dans le WP-Login.php et c'est lui qui est responsable de la redirection sur le WP-Signup.php par défaut.

Cas "Enregistrer": if (is_multisite ()) (WP_REDIRECT (Apply_Filters ( "WP_SIGNUP_LOCATION", Network_site_URL ( "WP-SignUp.php"))); sortie; // ...

Comment vous rappelez-vous, par défaut, la page d'enregistrement s'ouvre sur le domaine principal du réseau. C'est pourquoi Network_Site_url () est utilisé ici.

Ajoutez votre gestionnaire de filtre à MU-Plugins / Selena-Network / Signup / Plugin.php, qui sera donné l'adresse de la page d'enregistrement sur le site actuel:

Fonction selena_network_signup_page ($ URL);) add_filter ( "WP_SIGNUP_LOCATION", "Selena_Network_signup_page", 99);

selena_Network - Préfixe, que j'utilise dans les noms de toutes les fonctions à l'intérieur des plugins MU sur mon site pour éviter les conflits, doit être remplacé par son préfixe unique. La priorité de l'ajout de filtre 99, car certaines plug-ins, telles que BbPress et BuddyPress, peuvent écraser cette adresse à vous-même (les plugins MU sont chargés plus tôt que les plugins conventionnels, voir ci-dessus).

S'il vous plaît noter que HOME_URL () est utilisé, qui, contrairement Network_site_URL (), donne l'adresse du site actuel, et non le principal site de réseau.

Fonctionnalité WP-Signup.php

Le fichier WP-Signup.php contient un grand nombre de fonctions et de code. Pour voir la photo dans son ensemble, vous pouvez utiliser le code pliable. En règle générale, en anglais s'appelle "Code pliable".

Au tout début du fichier de 1 à 80, la ligne (dans la version 4.1.1), plusieurs contrôles sont effectués et sortir la page « commencer » à l'aide get_header ().

Ensuite, de nombreuses méthodes sont déclarées et avant de commencer à travailler avec eux, il convient de comprendre ce qui rend chaque fonction. À l'intérieur, beaucoup d'entre eux sont souvent utilisés d'autres fonctions avec le préfixe WPMU_, tous sont déclarées dans le fichier WP-Inclus / MS-Fonctions.php. Cette section est difficile à comprendre sans voir le code vous-même. Au dessous de petite description fonctions de base au cas où vous auriez des difficultés.

  • wpmu_signup_stylesheet () - Sortie de CSS supplémentaire sur la page d'enregistrement.
  • show_blog_form () - champs pour l'enregistrement de site (adresse, visibilité de nom pour les moteurs de recherche).
  • validate_blog_form () - Vérification de l'adresse et des noms du site entrés à l'aide de wpmu_validate_blog_signup ().
  • show_user_form () - champs pour l'enregistrement de l'utilisateur (adresse de connexion et adresse électronique).
  • validate_user_form () - Vérification de la connexion entrée et des adresses. Mail avec wpmu_validate_user_signup ().
  • signup_Another_Blog () - Champs pour enregistrer de nouveaux sites à l'aide de show_blog_form () pour les utilisateurs déjà enregistrés sur le site.
  • validate_another_blog_signup () - vérifie l'adresse et le nom du site à l'aide de validate_blog_form ().
  • signup_user () est la fonction principale pour émettre le champ de la page d'enregistrement.
  • validate_user_signup () - vérifie la connexion et l'adresse e-mail. Mail avec validate_user_form ().
  • signup_blog () - Champs de saisie de l'adresse, du nom et de la visibilité du site (deuxième étape d'enregistrement) à l'aide de show_blog_form ().
  • validate_blog_signup () - vérifie la connexion, l'adresse e-mail. Mail, adresse et nom du site.

Au fond du fichier WP-Signup.php (à partir de 646 coutures dans la version 4.1.1), la page logique principale de la page d'enregistrement utilise les méthodes ci-dessus. Cette partie du code n'est pas soumise à la fonction. À la fin, Get_footer () est appelé.

Copier le WP-Signup.php fonctionnel

Ensuite, la procédure de copie d'un WP-Signup.php dans MU-Plug-ins sera décrite et apporter des modifications à la fourchette. Cela ne semble pas ne sembler pas la bonne façon. Au lieu de cela, vous pouvez écrire vos fonctions à partir de zéro pour vérifier et produire des formulaires en utilisant des classes, pas des fonctions conventionnelles. À mon avis, le WP-Signup.php dispose déjà de toute la logique nécessaire pour notre page, il reste seulement de faire des changements mineurs.

Lors de la mise à jour WordPress, le WP-SignUp.php passe de temps en temps, mais cela ne signifie pas que chaque version devra synchroniser son « forc ». Fonctions à l'intérieur WP-SignUp.php sont essentiellement engagés que par la sortie HTML, vérification des données, la création de comptes et les sites sont engagés dans le préfixe WPMU_, a déclaré dans MS-functions.php.

Nous allons créer une fonction qui affichera le formulaire d'inscription sur la page. Pour ce faire, copiez WP-Signup.php de WordPress Root dans MU-Brippings / Selena-Network / Inscription /. Connectez-le à l'intérieur de Mu-Pugins / Selena-Network / Signup / Plugin.php).

Exiger WPMU_PLUGIN_DIR. "/Selena-network/signup/wp-signup.php";

Supprimer toutes les vérifications requises et inutiles dès le début du fichier copié. Dans la version 4.1.1, il s'agit du code complet de 1 à 80 lignes.

Maintenant nous sommes prêts à créer fonction principale Afficher le formulaire d'inscription. Pour ce faire, toute la logique de la ligne 646 et à la fin du fichier, nous serons transférés à la fonction appelée selena_network_signup_main. À la fin, vous supprimez deux clôtures inutiles

(lignes 722 et 723), ainsi que l'appel get_footer ().

Dans le nouveau selena_network_signup_main () au début, nous déclarerons l'Active_SignUp variable globale que toutes les autres méthodes de cette utilisation de fichiers. Et ajoutez l'appel d'événement avant_signup_form, que nous avons supprimé du début du fichier.

Fonction Selena_Network_signup_main () (Active_SignUp globale $; do_action ( "before_signup_form"); // ...)

Maintenant, il reste seulement de changer la mise en page dans tous les endroits où elle est nécessaire et la page d'enregistrement est prête.

Sortie du formulaire d'inscription

Il y a au moins deux options ici. Un moyen plus pratique de créer un code abrégé et de le placer sur la page via l'éditeur habituel.

// Création d'un Network_signup Add_Shortcode shortcode ( "Network_signup", "Selena_Network_signup_main");

La deuxième option consiste à créer une page Signup.php dans le dossier Thème de la fille. Au lieu du mot "Signup", vous pouvez utiliser un identifiant unique attribué à la page. Dans le gabarit, ajoutez la disposition requise et apportez une sélection Selena_Network_Signup_Main () au bon endroit.

En conséquence, ma page d'inscription a commencé à sembler beaucoup mieux et plus propre.

Page d'activation

Par défaut, WordPress divise traditionnellement le processus d'enregistrement en multisite pour deux étapes - remplir le formulaire sur le site et l'activation du compte lorsque vous allez sur le lien envoyé dans un courriel. Après avoir rempli le formulaire créé dans la section précédente, WordPress envoie une lettre avec une petite instruction et une référence pour activer le compte.

Pour la sortie de la page d'activation, le fichier WP-Activate.php est répondu dans le répertoire racine WordPress. Wp-activate.php peut également être complètement modifié. Le processus est similaire à ce que nous avons déjà fait pour WP-Signup.php.

Créez l'exemple.org/activate / page via l'interface normale. À titre d'adresse, utilisez une URL qui vous conviendra.

Copiez le fichier WP-activate.php sur vos MU-plugins et connectez-le à Mu-Pugins / Selena-Network / Signup / Plugin.php.

Exiger WPMU_PLUGIN_DIR. "/Selena-network/signup/wp-activate.php";

À l'intérieur, pas tellement de contenu, contrairement à WP-Signup.php. Le fichier effectue une seule opération - active le compte si la touche correcte est obtenue et affiche un message d'erreur ou une opération réussie.

Supprimer tous les chèques inutiles et exiger - de 1 à 69 ligne dans WordPress 4.1.1. À la fin, supprimez l'appel get_footer (). Le contenu restant en transférant la fonction selena_network_activate_main ().

Il est intéressant de noter qu'avant télécharger WordPress (Wp-load.php) annoncé WP_Installing Constant. Sa présence provoque WordPress de ne pas charger des plugins.

Comme dans le cas de la page d'enregistrement, il reste seulement de fixer la mise en page où elle est nécessaire. Vous pouvez également modifier le texte des messages affichés (dans ce cas, n'oubliez pas d'ajouter un domaine texte de vos plugins MU à tous les traducteurs de fonction, il n'est pas installé ailleurs).

La fonction finie peut être utilisée sur une page prédéterminée via un code abrégé ou un modèle distinct dans une filiale.

Lettres d'activation avec des références appropriées

La page d'activation est prête à fonctionner, mais WordPress ne le sait pas et envoie toujours des lettres d'activation en référence à WP-Activate.php. Contrairement à WP-Signup.php Il n'y a pas de filtre, ce qui permettrait de changer l'adresse. Au lieu de cela, vous devez écrire votre fonctionnalité qui enverra des lettres avec des liens corrects.

Au moment de la remplissage et de l'envoi d'un formulaire sur la page d'enregistrement WordPress appelle wpmu_signup_ utilisateur.() ou wpmu_signup_ blog.() En fonction du type d'enregistrement. Les deux fonctions créent une nouvelle entrée dans la table WP_SIGNUPS le remplissant avec le contenu nécessaire, parmi lesquels une clé d'activation compte compte.

Après, en fonction de la fonction, wpmu_signup_ est appelé utilisateur._Notification () ou wpmu_signup_ blog._Notification (). Les deux fonctions ont des fonctionnalités similaires - générer et envoyer une lettre avec une référence d'activation, mais prennent des arguments différents. Dans les deux, il existe des filtres pour "interception" d'événements.

Si (! Apply_Filters ("wpmu_signup_user_notification", $ utilisateur, $ user_email, $ clé, $ meta)) renvoie false;

Pour activer les comptes avec la création de blogs:

Si (! Apply_Filters ("wpmu_signup_blog_notification", $ domaine de domaine, $ chemin, $ chemin, titre, $ titre, $ utilisateur, $ user_email, $ clé, $ Meta)) (retour false;

Il ne reste plus qu'à écrire vos gestionnaires dans lequel vous envoyez des lettres via wp_mail (), et à la fin nécessairement donner de faux pour que WordPress n'envoie pas une lettre d'activation deux fois - un des vôtres, une autre - lettre par défaut avec un lien vers Wp-activate.php.

Fonction SELENA_NETWORK_WPMU_SIGNUP_USER_NOTIFICATION ($ utilisateur, $ user_email, $ clé, $ méta \u003d tableau ()) (// générer une en-tête, des en-têtes de texte et de lettre // ... // Envoyez une lettre ou ajoutez une tâche cronie à envoyer une lettre wp_mail (user_email $, WP_SPECIALCHARS_DECODE ($ subject), $ message, $ message_headers); // Récupérer False afin que WordPress n'envoie pas une lettre d'activation double return false;) add_filter ( "WPMU_SIGNUP_UVER_NOTIFICATION", "selena_network_wpmu_signup_user_notification", 10, 4) ;

Si vous envoyez des lettres via le serveur SMTP ou que le nombre d'enregistrements est très important, vous devez penser à ne pas envoyer de lettres instantanément. Au lieu de cela, vous pouvez ajouter des tâches cron à l'aide de WordPress Cron.

Close Accès à WP-Signup.php et WP-Activate.PHP

Après avoir créé ses propres pages d'inscription et d'activation, il peut être nécessaire de fermer les «originaux». Par exemple, si sur la page d'enregistrement il y a champs supplémentairescela doit être rempli. De plus, de nombreux sites WordPress sont exposés à des enregistrements de spam.

Résolvez deux problèmes avec une action peut être demandé à Apache de donner 404 dans le cas de la tentative d'ouverture de ces pages. Pour ce faire, il vous suffit d'enregistrer une paire de réracteurs supplémentaires dans votre fichier de configuration ou.htaccess.

Réécritengine sur rewritebase / # connaissance expressions régulières ne sera jamais superflu :) RewriteRule ^ WP-Signup \\ .php - Rewriterule ^ WP-Activer \\ .php - # Commencer WordPress # Règles de WordPress par défaut Ne touchez pas :) # ... # End WordPress

Conclusion

Pour cela et de nombreux autres "problèmes" associés à WordPress sur Internet, de nombreuses solutions sont nombreuses. Par exemple, pour créer des pages d'enregistrement et d'activation, certains sont proposés pour réécrire le WP-Signup.php d'origine et WP-Activate.php. Cela ne devrait pas être fait car dans le cas de la mise à jour WordPress, vous perdrez toutes les modifications apportées aux fichiers et vous ne pourrez pas, vérifier l'intégrité du noyau en utilisant.

Lors de l'élaboration de tout ajout, des sujets ou des solutions doivent être passés de temps à gérer ce qui se passe à l'intérieur de WordPress. Il existe de nombreux outils de débogage utiles pour cela.

P.s.

Pour affecter automatiquement différents rôles, les nouveaux utilisateurs peuvent utiliser un plug-in multi-utilisateurs d'utilisateurs.

Si vous avez des questions ou des difficultés lors de la création de pages d'inscription et d'activation après avoir lu l'article, laissez un commentaire et que nous répondrons.

27.03.2015 27.03.2015

Développeur WordPress. Il aime l'ordre dans tout et traiter dans de nouveaux outils. Inspiré de l'architecture des composants de symfony.

  • La cloche.

    Il y a ceux qui ont lu cette nouvelle devant vous.
    Abonnez-vous pour recevoir des articles frais.
    E-mail
    Nom
    Nom de famille
    Comment voulez-vous lire la cloche
    Sans spam