Tout au long de cette série, nous avons créé un plugin destiné à fournir aux auteurs un moyen de collecter, de gérer et de sauvegarder des idées et des références au contenu qu'ils créent dans WordPress..
Ce faisant, nous cherchons également des moyens d’organiser notre plug-in afin que le code et l’organisation des fichiers soient clairs et faciles à gérer, de sorte que, au fil du développement du plug-in, nous puissions facilement ajouter, supprimer et maintenir son contenu. fonctionnalités.
Jusqu'à présent, nous avons mis en place l'organisation de base des fichiers du plug-in et du système frontal, mais nous n'avons pas encore implémenté de fonctionnalité permettant d'enregistrer des informations dans la base de données. Et si vous ne pouvez pas sauvegarder les informations, alors le plugin ne sera d'aucun bénéfice pour personne.
Dans cet article, nous allons revenir au code côté serveur et commencer à implémenter la fonctionnalité qui:
Nous avons du pain sur la planche. Dans cet article, nous allons examiner les deux premières étapes, puis dans le prochain post, nous examinerons les deux dernières étapes..
Afin de vérifier que l'utilisateur a la possibilité de publier pour sauvegarder des métadonnées postérieures, nous devons implémenter un contrôle de sécurité pendant le processus de sérialisation. Pour ce faire, nous devons tirer parti d’une valeur nonce.
Un nonce est un "numéro utilisé une fois" pour protéger les URL et les formulaires contre toute utilisation abusive..
Afin d'en introduire un dans notre méta-boîte, nous pouvons implémenter la fonctionnalité dans le balisage responsable du rendu du modèle de publication. Pour ce faire, chargez admin / views / authors-commentary-navigation.php
et mettez à jour le modèle afin qu'il inclue un appel à wp_nonce_field
:
Ressources brutes publiées
Dans le code ci-dessus, nous avons introduit un nonce qui correspond à l’action de sauvegarder le commentaire de l’auteur (que nous avons nommé auteurs_commentaire_nonce
) et l'associer à une valeur identifiée par auteurs_commentary
.
Nous verrons où cela entre en jeu momentanément. Pour le moment, si vous chargez votre navigateur, vous ne verrez rien de nouveau. C'est parce que les valeurs de nonce sont affichées dans un champ caché.
Pour ceux qui sont curieux, vous pouvez lancer les outils de développement de votre navigateur favori, inspecter la méta-boîte, et vous devriez trouver quelque chose comme ce qui suit dans le balisage:
Bien sûr, le valeur
de votre nonce sera différent.
Afin de nous assurer que l'utilisateur est autorisé à enregistrer la publication, nous souhaitons vérifier trois choses:
Nous allons écrire deux fonctions d’aide pour réaliser la première et la troisième et utiliser certaines fonctions intégrées pour vérifier le numéro deux (qui sera utilisé dans la deuxième fonction d’aide)..
Commençons par configurer le point d'ancrage et la fonction qui sera utilisée pour exploiter les fonctions d'assistance et enregistrer les métadonnées. Dans le constructeur de Authors_Commentary_Meta_Box
, ajoutez la ligne de code suivante:
Ensuite, définissons la fonction. Notez que je passe des appels à deux fonctions dans le bloc de code suivant. Nous allons les définir momentanément:
is_valid_post_type () || ! $ this-> user_can_save ($ post_id, 'authors_commentary_nonce', 'authors_commentary_save')) return;
Compte tenu du code ci-dessus, nous demandons à WordPress de renvoyer notre save_post
fonctionner chaque fois que son save_post
l'action est appelée. À l'intérieur de la fonction, nous disons "Si la publication qui est enregistrée n'est pas un type de publication" ou ", ou si l'utilisateur n'a pas l'autorisation de sauvegarder, quittez la fonction."
Bien sûr, nous devons définir les fonctions pour que la logique fonctionne. D'abord, nous écrirons le is_valid_post_type
fonctionner comme privé
fonction de la classe en cours. Il va vérifier le $ _POST
tableau pour s'assurer que le type de poste qui est enregistré est, en fait, un poste.
Ensuite, nous ajouterons le
user_can_save
une fonction. Il s’agit de la fonction qui garantit que la publication n’est pas enregistrée par WordPress et que, si un utilisateur enregistre la fonction, la valeur de nonce associée à l’action de publication est correctement définie..Notez ici que nous passons dans le
nonce_action
et lenonce_id
que nous avons défini dans le modèle dans la première étape. Nous utilisons aussiwp_verify_nonce
en conjonction avec lesdites informations.C’est ainsi que nous pouvons vérifier que la publication sauvegardée est effectuée par un utilisateur disposant des droits et autorisations appropriés..
Assainir les données
En supposant que l'utilisateur travaille avec un type d'article standard et qu'il est autorisé à enregistrer des informations, nous devons effacer les données..
Pour ce faire, nous devons procéder comme suit:
- Assurez-vous qu'aucune des informations contenues dans les métadonnées post est vide
- Enlevez tout ce qui pourrait être dangereux d'écrire dans la base de données
Après cela, nous verrons ensuite comment enregistrer les informations pour chacune des boîtes à méta. Mais d’abord, travaillons sur la désinfection. Nous pouvons procéder de différentes manières pour mettre cela en œuvre. Pour les besoins de cet article, nous le ferons de la manière la plus simple possible: nous vérifierons l'existence des informations en fonction de leur clé, puis, si elles existent, nous les désinfecterons..
Pour les programmeurs expérimentés, vous remarquerez probablement que du code sent le code que nous sommes sur le point d'écrire. Plus tard dans cette série, nous ferons une refactorisation pour voir comment nous pouvons rendre le plugin plus facile à maintenir afin que cela fasse partie de l'intention de ce post particulier.
Cela dit, retournez dans le
save_post
une fonction.1. Brouillons
Comme le premier onglet qui existe dans la boîte à méta est le Brouillons onglet, nous allons commencer avec elle. Notez que c'est un
zone de texte
, la logique qui existe pour la désinfection de cette information devrait donc être la suivante:
Rappelons que le zone de texte
est appelé auteurs-commentaires-brouillons
afin que nous puissions y accéder dans le $ _POST
tableau. Pour cela, nous allons utiliser le code suivant:
En termes simples, nous vérifions si les informations contenues dans le
$ _POST
tableau est vide. Si non, alors nous allons désinfecter les données.2. ressources
Ce domaine particulier est un peu plus en forme car dynamique. En d’autres termes, l’utilisateur peut avoir de zéro à plusieurs champs à gérer. Rappelez-vous que cet onglet est conçu principalement pour les URL. Nous devons donc nous assurer que nous purifions en toute sécurité les informations de cette manière..
Premièrement, nous devons apporter un petit changement à la
createInputElement
fonction qui existe dans leadmin / assets / js / resources.js
fichier. Plus précisément, nous devons nous assurer que l'attribut name utilise un tableau afin de pouvoir y accéder correctement et l'itérer à travers celui-ci lorsque vous regardez$ _POST
Les données.Assurez-vous que les lignes de code responsables de la création de l'élément réel ressemblent à ceci:
// Ensuite, créez l'élément d'entrée réel, puis renvoyez-le à l'appelant $ inputElement = $ ('') .attr (' type ',' text ') .attr (' nom ',' auteurs-commentary-resources ['+ iInputCount +'] ') .attr (' id ',' auteurs-commentary-resource- ' + iInputCount) .attr ('valeur', ");Notez que la clé de ce que nous avons fait réside dans la ligne qui met à jour le
prénom
. Plus précisément, nous plaçons le nombre d'entrées d'un index du tableau.Ensuite, retournez dans le
save_post
fonction et ajoutez le code suivant (que nous discuterons après le bloc):Comme nous travaillons avec un tableau d’entrées, nous devons d’abord vérifier que le tableau n’est pas vide. Si ce n'est pas le cas, nous devons effectuer une itération car nous ne savons pas combien d'entrées nous devrons gérer..
Semblable au bloc précédent, nous effectuons un niveau de base de désinfection et d’évasion. C'est quelque chose que vous pouvez rendre aussi agressif ou détendu que vous le souhaitez. Nous reviendrons sur cette condition dans le prochain article lorsqu'il sera temps de sauvegarder les données..
3. Publié
Cet onglet est similaire aux onglets précédents en ce sens que nous traitons d'un nombre indéterminé d'éléments à nettoyer. Cela signifie que nous devrons faire une petite mise à jour de la partie responsable du rendu de cette entrée..
En revanche, nous ne traitons qu'avec une case à cocher qui a la valeur booléenne d'être cochée ou non (ou, en particulier, «on» ou vide), il est donc très facile de désinfecter les informations..
Commençons par mettre à jour le partiel. Localiser
admin / views / partials / published.php
. Ensuite, trouvez la ligne qui définit lecontribution
checkbox et changez-le pour qu'il ressemble à ceci:Notez que nous avons changé le
prénom
attribut afin qu’il utilise un tableau avec un index comme valeur. Ensuite, nous allons revenir dans lesave_post
fonctionne encore une fois pour introduire la validation sur cet élément particulier:Comme nous l'avons fait avec les données précédentes, nous vérifions d'abord si le contenu existe. Si c'est le cas, nous l'assainissons pour le préparer à la sauvegarde. Sinon, nous ne faisons rien.
Sur la sauvegarde
À ce stade, nous sommes bien placés pour aborder les deux derniers points de la série:
- Sauvegarde et récupération
- Refactoring
À partir du prochain article, nous reverrons le code que nous avons écrit dans cet article pour voir comment nous pouvons l'enregistrer dans la base de données et le récupérer à partir de la base de données afin de l'afficher au serveur..
Ensuite, nous allons passer à la refactorisation. Après tout, l'écriture d'un code maintenable consiste à s'assurer qu'il est bien organisé et facilement modifiable. Comme le code avec lequel nous travaillons au quotidien a déjà été écrit et pourrait être remanié, nous allons voir comment le faire à la fin de la série..
En attendant, examinez le code ci-dessus, consultez le code source de GitHub et laissez des questions et des commentaires dans le champ ci-dessous..