Dans ce didacticiel, vous apprendrez à créer un plug-in permettant aux utilisateurs de soumettre des données de formulaire. Vous apprendrez également la sécurité en utilisant des nonces.
Les codes abrégés sont souvent utilisés pour afficher des données simples, mais comme ils constituent en fait un moyen de sortir d'une page ou de publier et d'exécuter du code, ils peuvent être utilisés pour des tâches assez complexes, telles que l'affichage et le traitement de formulaires..
Nous allons construire un plugin qui permettra aux utilisateurs connectés de:
Voici ce que nous visons:
Tout le code est disponible dans le source du plugin en haut de ce tutoriel.
Le dossier du plugin WordPress se trouve dans votre dossier d’installation WordPress à wp-content / plugins
. Créez un dossier dans le dossier plugins. Appelons ça soumets-utilisateurs-soumissions
. Maintenant, créez le fichier de plugin lui-même. Appelons ça submit_user_quotes.php
. Le chemin d'accès à votre fichier de plugin devrait maintenant être: wp-content / plugins / submit-user-quotes / submit_user_quotes.php
Chaque plugin Wordpress nécessite des informations d’en-tête afin que WordPress puisse l’identifier et le rendre disponible sur votre page de plugin de tableau de bord.
Vous pouvez modifier cette information selon vos propres exigences.
Vous verrez le plugin répertorié comme ceci:
Étape 2 Fonction d'initialisation du plugin
Nous allons créer un type de publication personnalisé nommé Citations pour contenir nos citations et une taxonomie personnalisée nommée quote_category. Cela permettra une administration plus propre des citations que de les attribuer simplement à des publications et à des catégories normales..
Le crochet et la fonction init
Nous utiliserons le code d'initialisation suivant pour créer notre type de publication personnalisé et notre taxonomie personnalisée:
add_action ('init', 'suq_plugin_init'); function suq_plugin_init () $ quote_type_labels = array ('nom' => _x ('Citations', 'nom général du type de message'), 'nom_s singulier' => _x ('devis', 'nom singulier du type de message'), 'add_new '=> _x (' Ajouter un nouveau devis ',' devis '),' add_new_item '=> __ (' Ajouter un nouveau devis '),' edit_item '=> __ (' Modifier le devis '),' new_item '=> __ ( 'Ajouter un nouveau devis'), 'all_items' => __ ('Visualiser les devis'), 'view_item' => __ ('Voir le devis'), 'search_items' => __ ('Rechercher des devis'), 'not_found' = > __ ('Aucune citation trouvée'), 'not_found_in_trash' => __ ('Aucune citation trouvée dans la corbeille'), 'parent_item_colon' => ", 'nom_menu' => 'Citations'); $ quote_type_args = array ('labels '=> $ quote_type_labels,' public '=> true,' query_var '=> true,' rewrite '=> true,' capacite_type '=>' post ',' has_archive '=> true,' hiérarchique '=> false, 'menu_position' => null, 'supports' => array ('title', 'editor', 'author')); register_post_type ('quotes', $ quote_type_args); $ quote_category_labels = array ('name' => _x ( 'Catégories de citation', 'nom général de la taxonomie'), 'nom_s singulier' => _x ( 'Citation', 'nom singulier de taxonomie'), 'search_items' => __ ('Catégories de devis de recherche'), 'all_items' => __ ('Toutes les catégories de devis'), 'parent_item' => __ ('Catégorie de devis parent '),' parent_item_colon '=> __ (' Catégorie de devis parent: '),' edit_item '=> __ (' Modifier la catégorie de devis '),' update_item '=> __ (' Mettre à jour la catégorie de devis '),' add_new_item '= > __ ('Ajouter une nouvelle catégorie de devis'), 'new_item_name' => __ ('Nouveau nom de devis'), 'menu_name' => __ ('Catégories de devis'),); $ quote_category_args = array ('hierarchical' => true, 'labels' => $ quote_category_labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array ('slug' => 'quote_category') ,); register_taxonomy ('quote_category', tableau ('quotes'), $ quote_category_args); $ default_quote_cats = array ('humour', 'politique', 'sport', 'philosophie'); foreach ($ default_quote_cats as $ cat) if (! term_exists ($ cat, 'quote_category')) wp_insert_term ($ cat, 'quote_category');Ce que fait ce code:
Nous aurons maintenant un menu Citations dans notre tableau de bord administrateur et un moyen de gérer les citations et leurs catégories..
Ensuite, nous définirons un code court qui nous permettra d’afficher (et de traiter) le formulaire de soumission de l’utilisateur dans un message ou une page:
add_shortcode ('suq_form', 'suq_form_shortcode');
Ici, nous utilisons la fonction add_shortcode de WordPress pour définir un shortcode nommé suq_form et une fonction nommée suq_form_shortcode qui sera appelée chaque fois que WordPress rencontre le shortcode [suq_form] dans une publication ou une page..
Avant d’examiner les fonctions d’affichage et de traitement des formulaires, parlons un peu de?
Parce que notre plugin accepte les données de l'utilisateur, nous implémentons les mécanismes de sécurité suivants:
Un nonce est un numéro utilisé une fois. Nous les utilisons pour vérifier que les données qui nous sont retournées proviennent des formulaires que nous avons créés..
Ici, nous générons un champ nonce en utilisant wp_nonce_field qui sera inclus dans notre formulaire en tant que champ caché:
wp_nonce_field ('suq_form_create_quote', 'suq_form_create_quote_submitted');
Comme il s'agit maintenant d'un champ caché dans notre formulaire, il nous sera renvoyé une fois le formulaire envoyé. Nous pouvons ensuite vérifier que le nonce est valide en utilisant wp_verify_nonce:
wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote'))
Cela reviendra vrai si le nonce vérifie.
C'est la fonction appelée par notre shortcode. Il affiche et traite le formulaire de soumission de devis et le formulaire d'inscription / suppression de devis. Nous allons le prendre par morceaux et à l'étape 5, nous examinerons les fonctions d'assistance.
fonction suq_form_shortcode () if (! is_user_logged_in ()) return 'Vous devez être connecté pour poster un devis.
'; global $ current_user;
if (isset ($ _POST ['suq_form_create_quote_submitted']) && wp_verify_nonce ($ _ POST ['suq_form_create_quote_submitted'], 'suq_form_create_quote')) $ suq_form_quote_auter (rédiger une offre de vente) $ suq_quote_text = trim ($ _ POST ['suq_quote_text']); if ($ suq_quote_author! = "&& $ suq_quote_text! =") $ quote_data = array ('post_title' => $ suq_quote_author, 'post_content' => $ suq_quote_text, 'post_status' => 'pending', 'post_author' => $ current_user-> ID, 'post_type' => 'quotes'); if ($ quote_id = wp_insert_post ($ quote_data)) wp_set_object_terms ($ quote_id, (int) $ _ POST ['suq_quote_category'], 'quote_category'); écho 'Devis créé et en attente de modération!
'; else // l'auteur ou le champ de texte est vide echo 'Citation NON enregistrée! Qui dit ça? et la citation ne doit pas être vide.
';
if (isset ($ _POST ['suq_form_delete_submitted'])) && wp_verify_nonce ($ _ POST ['suq_form_delete_submitted'], 'soq_form_delete'), 's' 'soq_form_delete_submitted']) $ _POST ['suq_delete_id'])) echo ''. $ quotes_deleted. 'devis supprimé!
';
echo suq_get_create_quote_form ($ suq_quote_author, $ suq_quote_text, $ suq_quote_category); if ($ quotes_table = suq_get_user_quotes ($ current_user-> ID)) echo $ quotes_table;
Ici, nous allons regarder les fonctions qui génèrent les formulaires et la fonction qui supprime les guillemets sélectionnés.
function suq_get_create_quote_form ($ suq_quote_author = ", $ suq_quote_text =", $ suq_quote_category = 0) $ out. = ''; retourne $ out;
function suq_get_quote_categories_dropdown ($ taxonomy, $ selected) return wp_dropdown_categories (array ('taxonomy' => $ taxonomy, 'name' => 'suq_quote_category', 'sélectionné' => $ sélectionné, 'hide_empty' => 0, 'echo' => 0));
function suq_get_user_quotes ($ user_id) $ args = array ('author' => $ user_id, 'post_type' => 'quotes', 'post_status' => 'en attente'); $ posts = new WP_Query ($ args); if (! $ posts-> post_count) renvoie 0; $ out. = ''; retourne $ out;Vos citations non publiées
'; $ out. = '
Les formulaires peuvent être manipulés dans le navigateur pour publier des données inattendues. Dans notre cas, chaque case à cocher supprimer se voit attribuer la valeur d'un message. Mais que se passe-t-il si un utilisateur malveillant modifie cette valeur et fait en sorte que notre fonction de suppression supprime un message non répertorié??
Une solution consiste à utiliser des nonces pour chaque ligne de données post, en veillant à ce que les nonces soient nommés de manière unique avec la valeur post à supprimer. Nous vérifions ensuite le nonce lors de la soumission du formulaire pour nous assurer qu'il s'agit d'une valeur de retour authentique..
fonction suq_delete_quotes ($ quotes_to_delete) $ quotes_deleted = 0; foreach ($ quotes_to_delete as $ quote) if (isset ($ _ POST ['suq_post_delete_id_'. $ quote]) && wp_verify_nonce ($ _TOBT ' citation); $ quotes_deleted ++; return $ quotes_deleted;
Il suffit de déposer ces informations de style dans le fichier style.css de votre dossier de thèmes:
#suq_quote_author width: 300px; #suq_quote_text width: 400px; hauteur: 100px; #quotes font-size: 12px; #quotes th text-align: left;
Activez le plugin, insérez le shortcode sur une page, connectez-vous à votre site et testez-le.
Le code source complet du plugin et un lien vers le site de démonstration sont répertoriés en haut de ce didacticiel..
Le dossier source contient également un modèle de page Wordpress avec une boucle personnalisée qui affiche les devis publiés pour tous les utilisateurs..