Créer des méta-boîtes WordPress maintenables vérifier et désinfecter

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:

  1. Vérifier que l'utilisateur a la possibilité de sauvegarder des méta-données postérieures
  2. Désinfectez les métadonnées post
  3. Sauvegarder les méta-données post
  4. Valider et récupérer les métadonnées post

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..

Vérification des autorisations

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..

1. Ajouter un nonce

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.

2. Vérifiez le nonce

Afin de nous assurer que l'utilisateur est autorisé à enregistrer la publication, nous souhaitons vérifier trois choses:

  1. que l'utilisateur enregistre des informations pour poster Type de poste
  2. que le message n'est pas automatiquement enregistré par WordPress
  3. que l'utilisateur a réellement la permission de sauvegarder

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 le nonce_id que nous avons défini dans le modèle dans la première étape. Nous utilisons aussi wp_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:

  1. Assurez-vous qu'aucune des informations contenues dans les métadonnées post est vide
  2. 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:

  • supprimer toutes les balises HTML
  • échapper au contenu de la zone de texte

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 le admin / 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 le contribution 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 le save_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:

  1. Sauvegarde et récupération
  2. 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..