Ceci est la deuxième partie de la série consacrée au développement d’un plug-in de questionnaire à choix multiple pour WordPress. Dans la première partie, nous avons créé le backend de notre plugin pour capturer les données nécessaires à stocker dans la base de données.
Dans cette dernière partie, nous allons créer l’interface du plugin où les utilisateurs peuvent répondre à des quiz et évaluer leurs connaissances..
Les sujets suivants seront abordés dans cette partie de la finalisation de notre plugin:
Nous aurons besoin d'un nombre considérable de questions dans le backend pour générer des quiz aléatoires. J'espère que vous avez déjà travaillé avec le serveur et stocké suffisamment de questions pour les quiz.
Alors, commençons.
Nous devrions d’abord avoir un article ou une page qui charge les éléments d’affichage du quiz. Ceci peut être réalisé en utilisant soit un shortcode, soit un modèle de page. Dans ce plugin, un shortcode sera utilisé pour le rendre indépendant du thème.
Les codes courts nous permettent d’utiliser le plugin en tant que composant indépendant, tandis que les modèles de page dépendent du thème. D'autre part, un modèle de page est beaucoup plus sécurisé que les codes abrégés, car il est possible de supprimer des codes abrégés à l'intérieur des pages par erreur..Initialement, le shortcode devrait générer les catégories de quiz disponibles afin que les utilisateurs puissent sélectionner une catégorie pour générer le quiz. Un shortcode sera ajouté dans le constructeur en utilisant le add_shortcode
fonction comme indiqué dans le code suivant.
add_shortcode ('wpq_show_quiz', tableau ($ this, 'wpq_show_quiz'));
Maintenant, regardons l'implémentation du shortcode en récupérant les catégories de quiz disponibles dans la base de données.
fonction wpq_show_quiz ($ atts) global $ post; $ html = '';
Le code donné devrait être inclus dans le Mise en œuvre de la soumission de formulaire section du code précédent.
Une fois le formulaire soumis, nous vérifions si le formulaire contient l'action requise à l'aide du champ masqué que nous avons généré précédemment. Ensuite, nous obtenons la catégorie de quiz sélectionnée à partir du $ _POST
tableau.
Ensuite, nous interrogeons la base de données pour wptuts_quiz
messages avec la catégorie de quiz sélectionnée.
Il est important de définir commandé par
comme rand
pour générer des questions aléatoires pour les questionnaires, qui généreront sinon le même ensemble de questions à chaque fois. Aussi, assurez-vous de définir posts_per_page
définir le nombre maximum de questions par test.
Une fois les résultats générés, nous devons ajouter les questions aux éléments HTML nécessaires et nous les implémenterons dans la section suivante..
Les questionnaires peuvent être générés sous la forme d'un écran contenant toutes les questions à la fois ou d'un écran contenant une question à la fois avec des commandes de navigation. Je crois que cette dernière technique est la préférée de la plupart des gens. Par conséquent, nous allons afficher ce questionnaire avec une seule question et une navigation permettant de passer aux questions précédentes et suivantes..
Générer cette fonctionnalité à partir de zéro peut être une tâche fastidieuse et réinventer la roue. Un curseur jQuery sera la solution idéale pour cette situation et j'utiliserai RhinoSlider, car c'est mon préféré, alors prenez-en un exemplaire..
Dans le dossier téléchargé, vous verrez trois dossiers appelés img, js, et css. Copier le img et css dossiers dans notre plugin et copier les fichiers à l’intérieur du js dossier à l'existant js dossier que nous avons sur notre plugin quiz. Nous pouvons maintenant commencer à inclure les scripts et les styles nécessaires pour le curseur..
Dans la première partie, nous avons créé les scripts nécessaires pour le backend. Dans cette partie, nous allons inclure les scripts nécessaires pour RhinoSlider ainsi que quiz.js pour une fonctionnalité personnalisée.
Pour les applications plus volumineuses, nous pouvons utiliser des fichiers de script distincts pour le front-end et le back-end. Je vais utiliser un fichier de script pour simplifier les choses.Considérez le code suivant pour inclure les scripts et les données de configuration nécessaires.
fonction wpq_frontend_scripts () wp_register_script ('rhino', plugins_url ('js / rhinoslider-1.05.min.js', __FILE__), array ('jquery')); wp_register_script ('rhino-mousewheel', plugins_url ('js / mousewheel.js', __FILE__), array ('jquery')); wp_register_script ('rhino-easing', plugins_url ('js / easing.js', __FILE__), array ('jquery')); wp_register_script ('quiz', plugins_url ('js / quiz.js', __FILE__), array ('jquery', 'rhino', 'rhino-mousewheel', 'rhino-easing')); wp_enqueue_script ('quiz'); $ quiz_duration = get_option ('wpq_duration'); $ quiz_duration = (! empty ($ quiz_duration))? $ quiz_duration: 300; $ config_array = array ('ajaxURL' => admin_url ('admin-ajax.php'), 'quizNonce' => wp_create_nonce ('quiz-nonce'), 'quizDuration' => $ quiz_duration, 'plugin_url' => $ this -> plugin_url); wp_localize_script ('quiz', 'quiz', $ config_array);
Nous avons ici trois fichiers JavaScript utilisés pour RhinoSlider et le quiz.js fichier pour une fonctionnalité personnalisée. Dans la partie précédente, nous avons configuré la durée du quiz. Nous pouvons récupérer la durée en utilisant le get_option
fonction et l'assigner à la $ config
tableau. De plus, nous devons inclure des configurations communes dans le tableau de configuration..
Enfin, nous pouvons utiliser le wp_localize_script
fonction pour attribuer les données de configuration dans le quiz.js fichier.
De même, nous pouvons inclure les fichiers CSS requis pour Rhino Slider en utilisant le code suivant.
fonction wpq_frontend_styles () wp_register_style ('rhino-base', plugins_url ('css / rhinoslider-1.05.css', __FILE__)); wp_enqueue_style ('rhino-base');
Enfin, nous devons mettre à jour le constructeur du plug-in pour ajouter les actions nécessaires à l'inclusion des scripts et des styles, comme indiqué dans le code suivant..
add_action ('wp_enqueue_scripts', tableau ($ this, 'wpq_frontend_scripts')); add_action ('wp_enqueue_scripts', tableau ($ this, 'wpq_frontend_styles'));
Tout est prêt à intégrer le curseur avec des questions dans le shortcode que nous avons créé précédemment. Allons de l'avant.
Nous avons actuellement deux commentaires dans la fonction shortcode, mentionnant "Générer du HTML pour les questions" et "Curseur d'incorporation". Ces sections doivent être mises à jour avec le code correspondant pour générer un curseur. Nous devons d’abord mettre à jour le tandis que
boucle comme suit.
while ($ query-> have_posts ()): $ query-> the_post (); $ question_id = get_the_ID (); $ question = the_title (",", FALSE). ". get_the_content (); $ question_answers = json_decode (get_post_meta ($ question_id, '_question_answers', true)); $ questions_str. = '
Explication du code
get_post_meta
une fonction.pour chaque
boucle, toutes les réponses seront attribuées aux boutons radio avec les valeurs nécessaires.Ensuite, nous devons créer les conteneurs pour le curseur dans la section commentée comme "Curseur d’incorporation". Le code suivant contient le code HTML pour la création de conteneurs.
$ html. = '
Nous utiliserons une liste non ordonnée appelée curseur
en tant que conteneur pour Rhino Slider. Initialement, nous incluons l'ensemble des questions et réponses générées à l'intérieur de la boucle, en utilisant $ questions_str
. Il contiendra une collection d'éléments de liste.
Ensuite, nous devons créer manuellement un autre élément de la liste pour afficher les résultats du quiz et le score..
Désormais, toutes les données et diapositives requises pour l’application de quiz sont configurées. Nous pouvons initialiser Rhino Slider dans quiz.js voir le quiz en action.
jQuery (document) .ready (function ($) $ ('# slider'). rhinoslider (controlsMousewheel: false, controlsPlayPause: false, showBullets: 'toujours', showControls: 'toujours'););
J'ai utilisé des styles CSS personnalisés pour améliorer l'aspect et la convivialité. Vous pouvez trouver tous les CSS modifiés sous le wp_quiz
section de la rhinoslider-1.05.css fichier. Maintenant, vous devriez avoir quelque chose comme l'image suivante.
Une fois le questionnaire chargé, vous pouvez utiliser les commandes de navigation pour vous déplacer entre les questions et sélectionner les réponses. Vous devez cliquer sur le bouton "Obtenir les résultats" une fois que toutes les questions ont été répondues. Nous devons maintenant créer les résultats du questionnaire à l'aide d'une requête AJAX..
Implémentons le code jQuery pour effectuer la requête AJAX.
$ ("# completeQuiz"). click (function () wpq_quiz_results ();); var wpq_quiz_results = function () var selected_answers = ; $ (". ques_answers"). each (function () var question_id = $ (this) .attr ("data-quiz-id"); var selected_answer = $ (this) .find ('input [type = radio] : cochée '); if (selected_answer.length! = 0) var selected_answer = $ (selected_answer) .val (); selected_answers ["qid _" + question_id] = selected_answer; autre selected_answers ["qid _" + question_id] = ";); // demande AJAX;
Une fois que le bouton "Obtenir les résultats" est cliqué, nous appelons le wpq_quiz_results
fonction en utilisant jQuery. Chaque question a été ajoutée au curseur avec une classe CSS spéciale appelée ques_answers
.
En traversant chaque élément avec le ques_answers
classe, nous récupérons l'identifiant de la question en utilisant l'attribut HTML data appelé data-quiz-id
et le bouton radio sélectionné en utilisant jQuery.
Enfin, nous affectons toutes les questions et les réponses sélectionnées dans un tableau appelé selected_answers
, à transmettre à la demande AJAX.
Regardez le code suivant pour l'implémentation de la requête AJAX.
$ .post (quiz.ajaxURL, action: "get_quiz_results", nonce: quiz.quizNonce, data: selected_answers,, function (data) // code de traitement des résultats AJAX, "json");
Tout d'abord, nous créons la demande AJAX en utilisant les données de configuration attribuées à partir du wpq_frontend_scripts
une fonction. La liste de réponses générée dans la section précédente sera envoyée en tant que paramètre de données. Avant de gérer le résultat, nous devons examiner la mise en œuvre du code côté serveur dans la section suivante..
Tout d'abord, nous devons mettre à jour le constructeur avec les actions nécessaires pour utiliser AJAX pour les utilisateurs connectés et les utilisateurs normaux, comme indiqué dans le code suivant..
add_action ('wp_ajax_nopriv_get_quiz_results', array ($ this, 'get_quiz_results')); add_action ('wp_ajax_get_quiz_results', array ($ this, 'get_quiz_results'));
Ensuite, nous pouvons passer à la mise en œuvre de la get_quiz_results
fonctionne comme indiqué dans le code suivant.
fonction get_quiz_results () $ score = 0; $ question_answers = $ _POST ["data"]; $ question_results = array (); foreach ($ question_answers as $ ques_id => $ answer) $ question_id = trim (str_replace ('qid_', ", $ ques_id)). ','; if ($ answer == $ correct_answer) $ score ++; $ question_results ["$ question_id"] = array ("answer" => $ answer, "correct_answer" => $ correct_answer, "mark" => "correct"); else $ question_results ["$ question_id"] = array ("answer" => $ answer, "correct_answer" => $ correct_answer, "mark" => "incorrect"); total_questions = count ($ question_answers) ; $ quiz_result_data = array ("total_questions" => $ total_questions, "score" => $ score, "result" => $ question_results); echo json_encode ($ quiz_result_data);
Explication du code
$ _POST
tableau.qid_
préfixe.get_post_meta
une fonction.$ question_résultats
basé sur le statut du résultat.$ score
variable.$ quiz_result_data
tableau à envoyer comme réponse.Jusqu'à présent, nous avons créé la demande AJAX et mis en œuvre la réponse côté serveur. Dans la section suivante, nous allons terminer le processus de génération des résultats du questionnaire en gérant la réponse AJAX..
Dans la partie traitement des réponses, nous avons quelques tâches à effectuer, notamment l'affichage des résultats et des scores du quiz. Je vais donc séparer le code en quelques sections pour clarifier l'explication. Considérez le code suivant qui contient la requête AJAX complète.
$ .post (quiz.ajaxURL, action: 'get_quiz_results', nonce: quiz.quizNonce, data: selected_answers, function (data) // Section 1 var total_questions = data.total_questions; $ ('# curseur'). data ('rhinoslider'). next ($ ('# rhino-item' + total_questions)); $ ('# score'). html (data.score + '/' + total_questions); // Section 2 var result_html = '
Question | Réponse | Bonne réponse | Résultat |
'+ quiz_index +' | '+ ques.answer +' | '+ ques.correct_answer +' | '; result_html + = '|
'; result_html + = ' |