Intégration de questionnaires à choix multiples dans WordPress - Création du backend

Les questions à choix multiples sont un problème auquel la plupart d'entre nous avons été confrontés au moins une fois dans notre vie. Nous les aimons parce que nous pouvons fournir des réponses correctes en réfléchissant logiquement aux possibilités offertes, même si nous ne connaissons pas exactement la réponse correcte. Répondre aussi prend moins de temps, ce qui le rend si populaire.

Créer un quiz à choix multiples dans WordPress peut être une tâche très excitante et rentable. Vous pouvez l'utiliser dans votre blog personnel pour attirer plus de visiteurs, créer une section premium avec des questionnaires avancés ou créer des questionnaires axés sur des examens de certification populaires. Il existe de nombreuses possibilités pour le rentabiliser.

Ce plugin ne vous mènera pas à la création de questionnaires pour la création d’une entreprise, mais nous devons commencer quelque part pour arriver où nous voulons aller. Ce serait donc un bon début pour créer des quiz et en tirer des bénéfices..

Alors, commençons.


Fonctionnalité du plugin

Nous devons d’abord rassembler les exigences du plug-in avant de passer à la conception ou à la mise en œuvre. Fondamentalement, nous devrions pouvoir créer des questionnaires à choix multiples et permettre aux utilisateurs de répondre à ceux-ci et d'obtenir des résultats..

Jetons donc un coup d'œil aux exigences détaillées et aux composants de notre plugin:

  • Le plugin devrait avoir un backend où nous pouvons insérer des questions et des réponses dynamiquement. Aussi, il est idéal d'avoir des catégories de quiz pour regrouper les quiz dans des sections spécifiques.
  • L’administrateur du site doit pouvoir configurer les tests via une page de paramètres..
  • Les utilisateurs devraient avoir une interface où ils peuvent faire un quiz.
  • Une fois le questionnaire terminé, les utilisateurs doivent pouvoir obtenir les scores et les résultats..

Ce tutoriel va être construit en une série de deux parties, où nous développons le backend du plugin dans la première partie, suivi par le plugin frontend dans la seconde partie..


Planification du backend du plugin

Dans cette partie, nous allons nous concentrer sur le développement du backend du plugin où nous développons les données requises pour les questionnaires..

Il existe généralement une liste de quiz, chacun contenant une liste spécifique de questions. Avec ce plugin, nous n'allons pas créer de quizz. Nous créerons des questions individuelles et les assignerons dynamiquement à des questionnaires à la demande.

Nous pouvons maintenant prendre le temps d'identifier les composants nécessaires à la mise en œuvre du back-end, comme indiqué dans la section suivante..

  • Les questions doivent être créées dans le backend avec les réponses. Un type de message personnalisé sera la meilleure solution pour implémenter les questions. Nous allons donc utiliser un type de message personnalisé appelé wptuts_quiz.
  • Chaque question doit avoir plusieurs réponses et une bonne réponse. Les champs pour les réponses seront créés dans une boîte à méta dans l'écran de post-création personnalisé.
  • Les questions seront classées dans différents sous-thèmes. Nous avons donc besoin d’une taxonomie personnalisée appelée catégories de quiz pour le wptuts_quiz Type de poste.
  • Ensuite, nous devons valider le processus de création de la question. Nous utiliserons les validations jQuery côté client lorsque cela sera nécessaire pour la création de la question.
  • Enfin, nous avons besoin d’une page de paramètres de plug-in pour stocker le nombre de questions par questionnaire et la durée d’un questionnaire..

Après avoir identifié les composants WordPress nécessaires, nous pouvons directement passer à l’implémentation du backend du plugin quiz..


Créer des questions

Le processus de création de la question comprend quatre sections principales: définition du type de publication personnalisé, définition de la taxonomie personnalisée, attribution de champs personnalisés et validations. Chacune de ces sections sera discutée avec le code détaillé dans les sections à venir.

1. Création du type de publication personnalisée de questions

Nous avons besoin de la forme la plus élémentaire de type de publication personnalisée pour les questions sans configuration avancée. La seule chose à considérer est le choix du bon champ pour la question.

L'écran de post-création par défaut contient deux champs pour le titre et le contenu. Vous pouvez choisir n'importe lequel de ces champs pour la question. Je vais choisir la concaténation des champs de titre et de contenu en tenant compte des possibilités avancées.

Nous allons créer un plug-in orienté objet au lieu d'un plug-in fonctionnel, de sorte que toutes les actions, les codes courts et les initialisations nécessaires seront effectués à l'intérieur du constructeur. Ce qui suit contient le code pour implémenter le wptuts_quiz Type de poste.

 classe WP_Quiz public $ plugin_url; fonction publique __construct () $ this-> plugin_url = plugin_dir_url (__FILE__); add_action ('init', array ($ this, 'wpq_add_custom_post_type'));  public function wpq_add_custom_post_type () $ labels = array ('nom' => _x ('Questions', 'wptuts_quiz'), 'nom_menu' => _x ('Questionnaire WPTuts', 'wptuts_quiz'), 'nom_du_moteur' => _x ('Ajouter un nouveau', 'wptuts_quiz'), 'add_new_item' => _x ('Ajouter une nouvelle question', 'wptuts_quiz'), 'new_item' => _x ('Nouvelle question', 'wptuts_quiz'), 'all_items' => _x ('Toutes les questions', 'wptuts_quiz'), 'edit_item' => _x ('Modifier la question', 'wptuts_quiz'), 'view_item' => _x ('Voir la question', 'wptuts_quiz'), 'search_items '=> _x (' Search Questions ',' wptuts_quiz '),' not_found '=> _x (' Aucune question trouvée ',' wptuts_quiz '),); $ args = array ('labels' => $ labels, 'hierarchical' => true, 'description' => 'WP Tuts Quiz', 'supports' => array ('title', 'editor'), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'public_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' = > true, 'can_export' => true, 'rewrite' => true, 'type_de capacité' => 'post'); register_post_type ('wptuts_quiz', $ args); 

Nous avons activé les champs titre et éditeur du type d'article personnalisé à utiliser pour la question. Puisque les fonctions sont situées dans une classe, nous devons utiliser $ this dans nos actions WordPress, filtres et shortcodes pour appeler les fonctions.

En dehors de cela, tous les paramètres mentionnés dans le code sont initialisés avec leurs valeurs par défaut.

2. Créer les catégories de questions

Afin de regrouper les questions dans des sections spécifiques, nous avons besoin de quelque chose de similaire aux catégories WordPress par défaut. Nous allons donc utiliser une taxonomie personnalisée appelée catégories de quiz. Nous devons appeler la fonction de génération de taxonomie personnalisée sur le init action comme nous l'avons fait plus tôt. Donc, le constructeur de notre classe de plugin doit être mis à jour avec le code suivant.

 add_action ('init', array ($ this, 'wpq_create_taxonomies'), 0);

Ensuite, nous pouvons mettre en œuvre le wpq_create_taxonomies fonctionner sur le wptuts_quiz type de message comme indiqué dans le code suivant.

 function wpq_create_taxonomies () register_taxonomy ('quiz_categories', 'wptuts_quiz', array ('labels' => array ('name' => 'Catégorie Quiz', 'add_new_item' => 'Ajouter un nouveau Quiz Catégorie', 'new_item_name' = > "Nouvelle catégorie de quiz"), 'show_ui' => true, 'show_tagcloud' => false, 'hierarchical' => true)); 

J'ai utilisé les paramètres d'option par défaut pour créer cette taxonomie personnalisée. Une fois le plugin activé, votre type de message personnalisé et votre taxonomie s'afficheront comme indiqué dans l'écran suivant..

3. Création de la question Réponses

Ensuite, nous devons créer plusieurs réponses pour chaque question. Dans ce plugin, le nombre maximum de réponses par question sera limité à cinq..

Vous pouvez attribuer dynamiquement 1 à 5 réponses à chaque question. Nous devons également spécifier la bonne réponse à partir de la liste de réponses fournie. Puisque ces données sont associées à nos questions, nous pouvons utiliser une méta-boîte avec des champs personnalisés pour générer les champs nécessaires..

Comme d'habitude, nous devons mettre à jour le constructeur avec le code suivant:

 add_action ('add_meta_boxes', tableau ($ this, 'wpq_quiz_meta_boxes'));

Considérez le code suivant pour l'implémentation de boîtes à méta avec des champs de réponses.

 function wpq_quiz_meta_boxes () add_meta_box ('quiz-answers-info', 'Informations sur le quiz de réponses', tableau ($ this, 'wpq_quiz_answers_info'), 'wptuts_quiz', 'normal', 'high');  function wpq_quiz_answers_info () global $ post; $ question_answers = get_post_meta ($ post-> ID, '_question_answers', true); $ question_answers = ($ question_answers == ")? array (", ",", ","): json_decode ($ question_answers); $ question_correct_answer = trim (get_post_meta ($ post-> ID, '_question_correct_answer', true)); $ html = ''; $ html. = ''; $ html. = ''; $ index = 1; foreach ($ question_answers as $ question_answer) $ html. = ''; $ html. = ''; $ index ++;  $ html. = ''; $ html. = '
'; echo $ html;

4. Explication du code

  • Les réponses de chaque question seront stockées dans une chaîne codée JSON dans post_meta table avec la clé _question_answers. Nous avons donc accès à ce champ en utilisant le get_post_meta fonction pour obtenir les valeurs actuelles.
  • Nous obtenons ensuite la bonne réponse à la question en utilisant une méthode similaire. La bonne réponse sera stockée sous forme de chaîne dans le post_meta table avec la clé _question_correct_answer.
  • Enfin, nous créons le formulaire HTML, qui contient la réponse correcte sous forme de liste déroulante et les réponses possibles sous forme de cinq champs de zone de texte..
  • Toutes les valeurs existantes récupérées à l'aide du get_post_meta la fonction sera assignée aux champs respectifs.

Vous devriez voir quelque chose de similaire à l'écran suivant, une fois que vous avez créé la méta-boîte.

Nous disposons maintenant de toutes les données requises pour notre plug-in de génération de quiz. La prochaine étape consiste à enregistrer les données de la question dans la base de données..

Mais nous avons besoin de quelques validations avant cela. Passons donc aux validations.


Validation de la création de questions

Nous n'avons pas de règles de validation complexes à ce stade du processus de création de question. Nous allons donc utiliser les validations jQuery côté client avant la soumission.

Ici nous avons besoin de admin_enqueue_scripts action à inclure dans le constructeur de notre plugin.

Donc, mettez à jour le constructeur avec le code suivant avant de commencer.

 add_action ('admin_enqueue_scripts', tableau ($ this, 'wpq_admin_scripts'));

Examinez maintenant le code suivant pour inclure les fichiers de script nécessaires à la validation..

 fonction wpq_admin_scripts () wp_register_script ('quiz-admin', plugins_url ('js / quiz.js', __FILE__), array ('jquery')); wp_enqueue_script ('quiz-admin'); 

En utilisant wp_register_script et wp_enqueue_script, nous avons un fichier JS spécifique au plugin appelé quiz.js pour le traitement des validations. La validation sera effectuée à l'aide de la bibliothèque jQuery. Nous avons donc défini la bibliothèque intégrée jQuery comme dépendance de notre code JavaScript spécifique au plugin..

Après avoir inclus les scripts, implémentons les validations réelles dans le quiz.js fichier comme indiqué dans le code suivant.

 jQuery (document) .ready (function ($) $ ("# post-body-content"). prepend ('
'); $ ('# post'). submit (function () if ($ ("# post_type"). val () == 'wptuts_quiz') return wpq_validate_quizes ();); );

Tout d'abord, nous assignons un vide div élément de l'écran de création de publication pour afficher les erreurs éventuelles. Ensuite, nous pouvons appeler une fonction JS personnalisée sur l'action de post-publication en vérifiant le type de post approprié à l'aide de la touche #Type de poste valeur de champ caché.

Le code suivant contient la mise en oeuvre de la wpq_validate_quizes une fonction.

 var wpq_validate_quizes = function () var err = 0; $ ("# quiz_error"). html (""); $ ("# quiz_error"). hide (); if ($ ("# titre"). val () == ") $ (" # quiz_error "). append ("

Veuillez entrer le titre de la question.

"); err ++; var correct_answer = $ (" # correct_answer "). val (); si ($ (" # quiz_answer "+ correct_answer) .val () ==" ") $ (" # quiz_error "). ajouter("

La réponse correcte ne peut pas être vide.

"); err ++; if (err> 0) $ (" # publier "). removeClass (" button-primary-disabled "); $ (". spinner "). hide (); $ (" # quiz_error " ) .show (); return false; else retour vrai;;

Explication du code

  • Nous devons d’abord masquer le conteneur d’erreur et définir son message d’erreur actuel sur vide.
  • Ensuite, nous vérifions si le titre existe, car le titre est obligatoire pour les questions.
  • Ensuite, nous obtenons la réponse correcte sélectionnée et vérifions si le champ de réponse associé à la réponse correcte est vide..
  • Lorsque des erreurs de validation sont générées, nous affichons les erreurs dans le conteneur d'erreurs spécifié et empêchons l'envoi du message..

L'image suivante montre l'écran de post-création avec des messages de validation personnalisés..

Une fois le formulaire validé avec succès sans erreur, nous pouvons passer à l’enregistrement des détails de la question dans la base de données..


Enregistrement des détails de la question

WordPress fournit une action appelée save_post, qui sera exécuté juste après la création du post. Nous pouvons définir une fonction personnalisée sur le save_post action pour enregistrer les détails du champ personnalisé dans la base de données.

Comme d'habitude mettre à jour le constructeur avec le save_post code d'action.

 add_action ('save_post', array ($ this, 'wpq_save_quizes'));

Implémentation de wpq_save_quizes fonction est donnée dans le code suivant.

 fonction wpq_save_quizes ($ post_id) if (! wp_verify_nonce ($ _POST ['question_box_nonce'], nom de base (__FILE__))) return $ post_id;  if (défini ('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $ post_id;  if ('wptuts_quiz' == $ _POST ['post_type'] && current_user_can ('edit_post', $ post_id)) $ question_answers = isset ($ _POST ['quiz_answer'])? ($ _POST ['quiz_answer']): array (); $ filter_answers = array (); foreach ($ question_answers as $ answer) array_push ($ filtré_answers, sanitize_text_field (trim ($ answer)));  $ question_answers = json_encode ($ filtré_swers); $ correct_answer = isset ($ _POST ['correct_answer'])? sanitize_text_field ($ _POST ['correct_answer'])): ""; update_post_meta ($ post_id, "_question_answers", $ question_answers); update_post_meta ($ post_id, "_question_correct_answer", $ correct_answer);  else return $ post_id; 

L'identifiant de poste est automatiquement transmis à cette fonction. Initialement, nous exécutons des validations pour la valeur nonce et la sauvegarde automatique. La chose la plus importante avant d’enregistrer est la validation du type de publication.

Si vous omettez la vérification du type de publication, ce code sera exécuté pour tous les types de publication dans votre installation WordPress, y compris les publications normales, ce qui peut entraîner des données incohérentes..

Enfin, nous obtenons les valeurs de nos champs de réponses et le champ de réponse correct à enregistrer dans la base de données à l'aide de la touche update_post_meta une fonction. Tous les détails des champs personnalisés seront sauvegardés dans le post_meta table.

Nous avons maintenant terminé le processus de création de la question. Puisque nous utilisons des questionnaires générés aléatoirement, vous aurez peut-être besoin de nombreuses questions pour voir ce plugin en action. Alors préparez-vous en ajoutant des questions supplémentaires avant de mettre en œuvre le quiz dans la partie suivante.


Page Paramètres du questionnaire

Même si ce n'est pas obligatoire, il est idéal d'avoir une page de paramètres pour notre plugin afin que l'administrateur puisse personnaliser en fonction de ses préférences..

Implémentons donc une simple page de paramètres pour contenir la durée du questionnaire et le nombre de questions par questionnaire. Nous devons mettre en œuvre le admin_menu action dans le constructeur.

 add_action ('admin_menu', tableau ($ this, 'wpq_plugin_settings'));
 function wpq_plugin_settings () // crée un nouveau menu de niveau supérieur add_menu_page ('Paramètres du questionnaire WPTuts', 'Paramètres du questionnaire WPTuts', 'administrateur', 'paramètres_d'interrogation', $ ($ this, 'wpq_display_settings'));  fonction wpq_display_settings () $ html = '

Sélectionnez vos paramètres

'. wp_nonce_field ('update-options'). '

'; echo $ html;

Nous pouvons utiliser le add_menu_page fonction pour ajouter une page de paramètres à la zone d'administration. le wpq_display_settings la fonction est utilisée pour implémenter les éléments d'affichage de la page des paramètres.

Nous avons utilisé deux champs de texte pour la durée et des questions par questionnaire. La soumission des formulaires et la sauvegarde des données peuvent être gérées manuellement à l'aide d'un code personnalisé, mais WordPress nous fournit une méthode simplifiée pour la mise à jour des options..

Dans cette méthode, vous devez définir l’action de formulaire sur options.php fichier. Ensuite, vous devez créer un champ caché appelé action pour contenir la valeur de 'mettre à jour'. Enfin, nous devons avoir un autre champ caché appelé options_page contenir les noms des deux champs de texte à mettre à jour.

Veillez à utiliser ces techniques de mise à jour des options intégrées dans des scénarios où la configuration requise pour l'enregistrement des champs n'est pas complexe..

Une fois que le bouton d'envoi est cliqué, les détails du formulaire seront mis à jour automatiquement sans code personnalisé..


Et après

Nous avons terminé le backend de notre plugin quiz. Maintenant, vous pouvez créer des questions et vous préparer pour la partie suivante où nous utiliserons ces questions pour générer des questionnaires de manière dynamique..

Jusque-là, faites-moi savoir le meilleur moyen possible de mettre en œuvre un quiz dynamique sur l'interface. N'oubliez pas qu'une seule question sera affichée à la fois. Lorsque l'utilisateur demande une question, il peut passer à la question suivante..

nous attendons vos suggestions avec plaisir.