Choses à garder à l'esprit lors de la création d'un plugin WordPress à partir de zéro

Publié: 2022-01-02

Un plugin WordPress est en fait un fichier unique ou un groupe de fichiers qui étend ou améliore les fonctionnalités d'un site WordPress.

Chaque nouveau développeur sait « Comment coder ? », Mais lors de la création d'un plugin dans WordPress, le développeur doit se souvenir de certaines exigences de base pour créer un plugin WordPress en plus de la qualité, de la sécurité et des fonctionnalités du code.

Ce guide décrit les étapes importantes à garder à l'esprit lors de la création de plugins WordPress à partir de zéro.

Dans les plugins WordPress, une chose essentielle à comprendre est les Hooks WordPress, par exemple les actions et les filtres. Les crochets permettent aux plugins de s'exécuter avec des fonctionnalités définies à des moments spécifiques dans les fonctions WordPress.

Liste des crochets d'action : https://codex.wordpress.org/Plugin_API/Action_Reference

 define( 'WP_DEBUG', true );
--- L'option WP_DEBUG a été ajoutée dans la version 2.3.1 de WordPress.
--- Par défaut, on suppose qu'il est faux. Cependant, il est généralement défini sur true dans le fichier wp-config.php.

-> Ajoutez un en-tête d'informations spécifiques au plugin à notre fichier nouvellement créé dans le dossier Plugin.

 /*
Nom du plugin : Type de message de témoignage
URI du plug-in : https://wordpress.org/plugins/testimonial-post-type/
Description : Créez un type de publication de témoignage, c'est Taxonomie et balises.
Version : 1.0
Auteur : Elsner Technologies Pvt. Ltd.
URI de l'auteur : https://www.elsner.com
Domaine de texte : type de post-témoignage
Chemin du domaine : /languages
*/

En relation : Plugin WordPress récemment lancé par Elsner : Posts Slider Shortcode

–> Tous les plugins doivent avoir des noms de fonction, des définitions et des noms de classe uniques.

Cela empêche votre plugin d'entrer en conflit avec d'autres plugins ou thèmes.

–> N'utilisez pas __ (doubles traits de soulignement), wp_ ou _ (simple trait de soulignement) comme préfixe.

Ceux-ci sont réservés à WordPress lui-même. Vous pouvez les utiliser dans vos classes, mais pas en tant que fonction autonome

–> Veuillez sécuriser votre plugin à partir de l'accès direct aux fichiers.

 if ( !defined( 'ABSPATH' ) ) exit ; // Sortie si accès direct

— Vous pouvez éviter l'accès direct aux fichiers en mettant ce code en haut de tous les fichiers php :

–> Veuillez ajouter un nonce à vos appels POST pour empêcher tout accès non autorisé.

nonce (numéro utilisé une fois)

Les nonces WordPress ne sont pas des nombres, mais sont un hachage composé de chiffres et de lettres. Ils ne sont pas non plus utilisés une seule fois, mais ont une « durée de vie » limitée après laquelle ils expirent.

Normalement, nous générons une URL comme celle-ci qui supprime le post_id 174
http://example.com/wp-admin/post.php?post=123&action=trash

Cette URL est parfaite, mais pas sécurisée. Supposons qu'un attaquant connaisse l'ID des messages, alors un attaquant peut supprimer les messages avec cette URL à votre insu.

L'ajout d'un nonce empêchera cela. Par exemple, lors de l'utilisation d'un nonce, l'url que WordPress génère pour l'utilisateur ressemble à ceci :
http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204

 $nonce = wp_create_nonce( 'my-action_trash' );

— Cela renvoie simplement la valeur de nonce elle-même.

— Cette valeur que vous pouvez mettre dans une URL comme

action='http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce='.$nonce;

— Vérification d'un nonce qui est passé dans l'URL

 wp_verify_nonce( $_REQUEST['_wpnonce'], 'my-action_trash' );

Connexe : Comment soumettre votre plugin au répertoire des plugins WordPress ?

-> Veuillez désinfecter, vous échapper et valider vos appels POST

Sanitize : nettoyage de l'entrée utilisateur
On ne doit jamais avoir de données brutes insérées dans la base de données, même pas par une fonction de mise à jour ou avec un appel prepare().

L'assainissement de vos données POST lorsqu'elles sont utilisées pour effectuer des appels à l'action ou des redirections d'URL réduira la possibilité de vulnérabilités XSS.

sanitize_text_field($_POST['post_name']);
— Les données peuvent être nettoyées à l'aide de la fonction ci-dessus.
— Dans les coulisses, la fonction fait les choses mentionnées ci-dessous :
Vérifie l'UTF-8 non valide
Convertit les caractères < simples en entité
Supprime toutes les balises
Supprimer les sauts de ligne, les tabulations et les espaces blancs supplémentaires
Supprimer les octets
— sanitize_*() classe de fonctions d'assistance
https://developer.wordpress.org/plugins/security/securing-input/

Valider : Vérification de la saisie de l'utilisateur
En plus de la désinfection, vous devez valider tous vos appels. Si un appel $_POST ne doit être qu'un nombre, assurez-vous qu'il s'agit d'un int() avant de le transmettre à quoi que ce soit. Chaque fois que vous ajoutez des données à la base de données, il doit s'agir des bonnes données.

 intval( $_POST['post'] );
--- si $_POST['post']

a une valeur numérique, il renverra vrai. Si ce n'est pas le cas, alors faux.

Escape : Sécurisation de la sortie
L'évasion consiste à prendre les données que vous possédez déjà et à les sécuriser avant de les rendre à l'utilisateur final.

L'échappement/la diffusion sur la sortie supprime simplement toute ambiguïté et ajoute à la clarté.

 <h4> <?php echo esc_html( $title ); ?> </h4>
--- esc_html()

doit être utilisé lorsque l'élément HTML contient une section de données dont nous avons la sortie.

 esc_html ( chaîne $texte )

Échappement pour les blocs HTML.

 esc_html_e ( chaîne $texte )

Afficher le texte traduit qui a été échappé pour une utilisation sûre dans la sortie HTML.

 esc_html__ ( chaîne $texte )

Récupérez la traduction de $text et l'échappe pour une utilisation sûre dans la sortie HTML.

 <img alt="" src="<?php echo esc_url( $picture_url ); ?>
--- esc_url()

doit être utilisé sur chaque URL, y compris celles des attributs 'src' et 'href' d'un élément HTML.

 <?php echo esc_js( $valeur ); ?>
--- esc_js()

est destiné au Javascript en ligne.

 <ul class="<?php echo esc_attr( $classe_stockée ); ?>">
--- esc_attr()

est utilisable sur tout ce qui est imprimé dans un attribut de l'élément HTML.

Noter :-
Veuillez vérifier le lien ci-dessous pour comprendre où se trouvent les dossiers et comment les appeler au mieux
https://codex.wordpress.org/Determining_Plugin_and_Content_Directories

Si possible, enregistrez les données dans les tables wp_options.

L'objectif final de tout cela est de garantir que des données invalides et non sécurisées ne soient jamais traitées ou affichées. Nettoyer, vérifier, échapper à tout. De plus, ne faites jamais confiance aux utilisateurs pour qu'ils aient toujours des données d'entrée saines.

Connexe : Comment personnaliser la page de connexion WordPress