Integrera flera valmöjligheter i WordPress - Skapa backend

Flervalsfrågor är något som de flesta av oss har mött minst en gång i vårt liv. Vi älskar dem eftersom vi kan ge korrekta svar genom att logiskt tänka på förutsedda möjligheter, även om vi inte exakt vet rätt svar. Också svara tar mindre tid vilket gör den så populär.

Att skapa ett flervalsfrågor i WordPress kan vara en mycket spännande och lönsam uppgift. Du kan använda den i din personliga blogg för att locka till fler besökare, eller du kan skapa en premieavdelning med avancerade frågesporter, eller du kan skapa frågesporter som fokuserar på populära certifikatprov. Det finns många möjligheter att göra det lönsamt.

Det här pluginet tar dig inte igenom för att skapa frågesport för att bygga ett företag, men vi måste börja någonstans för att komma dit vi vill åka. Så det skulle vara en bra start för att skapa frågesportar och göra vinster ut ur det.

Så låt oss börja.


Plugins funktionalitet

Först måste vi samla kraven i plugin innan vi går till design eller implementering. I grund och botten borde vi kunna skapa multipelvalsquizzer och låta användare ta frågorna och få resultat.

Så låt oss ta en titt på de detaljerade kraven och komponenterna i vårt plugin:

  • Pluggen ska ha en backend där vi kan lägga in frågor och svar dynamiskt. Det är också perfekt att ha frågekategorier för att gruppera frågesporter i specifika avsnitt.
  • Webbplatsadministratören ska kunna konfigurera frågorna genom en inställningssida.
  • Användare bör ha en frontend där de kan ta en frågesport.
  • När en frågesport är klar bör användarna kunna få poäng och resultat.

Denna handledning kommer att konstrueras som en tvådelad serie, där vi utvecklar baksidan av plugin i första delen, följt av pluginfronten i andra delen.


Planerar pluginbacken

I den här delen kommer vi att fokusera på att utveckla backend i plugin där vi utvecklar nödvändiga data för frågesport.

Vanligtvis finns en lista med frågesporter, var och en innehåller en specifik lista över frågor. Med denna plugin kommer vi inte att skapa frågesport. Vi kommer att skapa individuella frågor och tilldela dem dynamiskt till frågesporter när det begärs.

Nu kan vi ta tid att identifiera de komponenter som krävs för att implementera backenden som anges i följande avsnitt.

  • Frågor måste skapas i backend med svaren. En anpassad posttyp kommer att vara den bästa lösningen för att genomföra frågorna. Så vi ska använda en anpassad posttyp som heter wptuts_quiz.
  • Varje fråga ska ha flera svar och ett korrekt svar. Fält för svar kommer att skapas inuti en metakassa på skärmen för anpassade inlägg.
  • Frågor kommer att kategoriseras i olika delämnen, så vi behöver en anpassad taxonomi som heter quiz_categories för wptuts_quiz posttyp.
  • Då måste vi validera frågan skapande processen. Vi kommer att använda klientsidan jQuery-valideringar när det är nödvändigt att skapa problem.
  • Slutligen behöver vi en plugin-inställningssida för att lagra antalet frågor per frågesport och varaktigheten för en frågesport.

Efter att ha identifierat de nödvändiga WordPress-komponenterna kan vi direkt flytta in till implementering av backend för quiz-plugin.


Skapa frågor

Frågeprocessen består av fyra huvudavsnitt: definierar anpassad posttyp, definierar anpassad taxonomi, tilldelar anpassade fält och valideringar. Var och en av dessa avsnitt kommer att diskuteras med detaljerad kod i de kommande avsnitten.

1. Skapa frågorna Anpassad posttyp

Vi behöver den mest grundläggande formen av anpassad posttyp för frågor utan några avancerade konfigurationer. Det enda vi behöver tänka på är valet av rätt fält för frågan.

Standardinställningsskärmen innehåller två fält för titel och innehåll. Du kan välja något av dessa fält för frågan. Jag ska välja sammanfattning av både titel- och innehållsfält med tanke på avancerade möjligheter.

Vi kommer att skapa ett objektorienterat plugin istället för ett funktionellt plugin, så alla nödvändiga åtgärder, kortkoder och initialiseringar görs inom konstruktören. Följande innehåller koden för att genomföra wptuts_quiz posttyp.

 klass WP_Quiz public $ plugin_url; allmän funktion __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 ('name' => _x ('Frågor', 'wptuts_quiz'), 'menu_name' => _x ('WPTuts Quiz', 'wptuts_quiz'), 'add_new' => _x ('Add New', 'wptuts_quiz'), 'add_new_item' => _x ('Lägg till ny fråga', 'wptuts_quiz'), 'new_item' => _x ('Ny fråga', 'wptuts_quiz'), 'all_items' => _x ('Alla frågor', 'wptuts_quiz'), 'edit_item' => _x ('Redigera fråga', 'wptuts_quiz'), 'view_item' => _x ('Visa fråga', 'wptuts_quiz'), 'search_items '=> _x (' Sökfrågor ',' wptuts_quiz '),' not_found '=> _x (' Inga frågor hittades ',' wptuts_quiz ')); $ args = array ('labels' => $ etiketter, 'hierarchical' => true, 'description' => 'WP Tuts Quiz', 'supports' => = true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => sant, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' = > true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post'); register_post_type ('wptuts_quiz', $ args); 

Vi har aktiverat både titel och redigeringsfält i den anpassade posttypen för att kunna använda frågan. Eftersom funktionerna finns i en klass måste vi använda $ detta i våra WordPress-åtgärder, filter och kortkoder för att ringa upp funktionerna.

Förutom att alla parametrar som nämns i koden initialiseras med standardvärdena.

2. Skapa frågekategorierna

För att gruppera frågor i specifika avsnitt behöver vi något som liknar standard WordPress-kategorier. Därför kommer vi att använda en anpassad taxonomi som heter quiz_categories. Vi behöver ringa den anpassade taxonomineringsfunktionen på i det åtgärder som vi gjorde tidigare. Så konstruktören i vår plugin-klass behöver uppdateras med följande kod.

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

Då kan vi genomföra wpq_create_taxonomies funktion på wptuts_quiz posttyp som visas i följande kod.

 funktionen wpq_create_taxonomies () register_taxonomy ('quiz_categories', 'wptuts_quiz', array ('etiketter' => array ('name' => 'Quiz Kategori', 'add_new_item' => 'Lägg till ny quiz-kategori', 'new_item_name' = > "New Quiz Category"), "show_ui" => true, 'show_tagcloud' => false, 'hierarchical' => true)); 

Jag har använt standardalternativsparametrarna för att skapa denna anpassade taxonomi. När plugin är aktiverad visas din anpassade posttyp och taxonomi som visas på följande skärm.

3. Skapa frågesvar

Därefter måste vi skapa flera svar för varje fråga. I denna plugin är det maximala antalet svar per enskild fråga begränsad till fem.

Du kan dynamiskt tilldela 1-5 svar på alla frågor. Vi måste också ange det korrekta svaret från den angivna listan med svar. Eftersom dessa uppgifter är förknippade med våra frågor kan vi använda en metakassa med anpassade fält för att skapa de nödvändiga fälten.

Som vanligt behöver vi uppdatera konstruktören med följande kod:

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

Tänk på följande kod för genomförandet av metakasser med svarfält.

 funktion wpq_quiz_meta_boxes () add_meta_box ('quiz-answers-info', 'Quiz Svar Info', array ($ this, 'wpq_quiz_answers_info'), 'wptuts_quiz', 'normal', 'high');  funktion 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. Kodförklaring

  • Svar på varje fråga lagras i en JSON-kodad sträng i post_meta bord med nyckeln _question_answers. Så vi får tillgång till det här fältet med hjälp av get_post_meta funktion för att få nuvarande värden.
  • Då får vi rätt svar på frågan med hjälp av en liknande metod. Det korrekta svaret lagras som en sträng i post_meta bord med nyckeln _question_correct_answer.
  • Slutligen skapar vi HTML-formuläret, som innehåller rätt svar som en rullgardinsruta och de möjliga svaren som fem textområdesfält.
  • Alla befintliga värden som hämtas med hjälp av get_post_meta funktionen kommer att tilldelas respektive fält.

Du borde se något som liknar följande skärm, när du har skapat metaboxen.

Nu har vi all information som krävs för vår plugin för quizgenerering. Nästa steg är att spara fråge data i databasen.

Men vi behöver några valideringar innan det. Så låt oss gå över i valideringar.


Validerande fråga skapande

Vi har inte komplicerade valideringsregler vid denna tidpunkt i frågan skapande processen. Därför kommer vi att använda klientsidan jQuery-valideringar innan de skickas in.

Här behöver vi admin_enqueue_scripts åtgärd som ska ingå i konstruktören av vårt plugin.

Så uppdatera konstruktören med följande kod innan vi börjar.

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

Kolla nu på följande kod för att inkludera nödvändiga skriptfiler för validering.

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

Använder sig av wp_register_script och wp_enqueue_script, vi har en plugin-specifik JS-fil som heter quiz.js för hantering av valideringar. Valideringen kommer att göras med jQuery-biblioteket och därför har vi satt in det inbyggda jQuery-biblioteket som ett beroende av vår plugin-specifika JavaScript.

Vi har tagit med skripten, låt oss genomföra de faktiska valideringarna i quiz.js filen som visas i följande kod.

 jQuery (dokument) .ready (funktion ($) $ ("# post-body-content"). prepend ('
'); $ ('# post'). Skicka (funktion () if ($ ("# post_type") .val () == 'wptuts_quiz') returnera wpq_validate_quizes ();); );

För det första tilldelar vi en tom div element till bildskärmen för att skapa eventuella fel. Då kan vi ringa en anpassad JS-funktion på postpubliceringsåtgärden genom att kontrollera rätt posttyp med hjälp av #post_type doldt fältvärde.

Följande kod innehåller genomförandet av wpq_validate_quizes fungera.

 var wpq_validate_quizes = funktion () var err = 0; $ ( "# Quiz_error") html ( ""); $ ( "# Quiz_error") döljer (). om ($ ("# title") .val () == ") $ (" # quiz_error ").

Var vänlig ange frågestitel.

val (); ($ ("# quiz_answer" + correct_answer) .val () == "") $ ("# quiz_error"). bifoga("

Korrekt svar kan inte vara tomt.

"), (err), if (err> 0) $ (" # publicera "). removeClass (" knapp-primärtaktiverad "); $ (" spinner "). hide (); $ (" # quiz_error " ) .show (); return false; else return true;;

Kodförklaring

  • Först måste vi dölja felbehållaren och ställa in sitt nuvarande felmeddelande för att tömma.
  • Då kontrollerar vi om titeln finns, eftersom titeln är obligatorisk för frågor.
  • Därefter får vi det valda korrekta svaret och kontrollerar om svarfältet som är relaterat till det korrekta svaret är tomt.
  • När valideringsfel genereras visar vi fel i den angivna felbehållaren och förhindrar inlämning av posten.

Följande bild visar bildskärmen för skapande av inlägg med anpassade valideringsmeddelanden.

När formuläret är framgångsrikt validerat utan fel kan vi gå vidare till att spara frågetaljerna till databasen.


Sparar frågetecken

WordPress ger en åtgärd som heter spara inlägget, som kommer att utföras strax efter posten skapandet. Vi kan definiera en anpassad funktion på spara inlägget åtgärd för att spara anpassade fältuppgifter i databasen.

Som vanligt uppdaterar konstruktören med spara inlägget åtgärdskod.

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

Genomförande av wpq_save_quizes funktionen ges i följande kod.

 funktion wpq_save_quizes ($ post_id) if (! wp_verify_nonce ($ _POST ['question_box_nonce'], basnamn (__FILE__))) return $ post_id;  om (definierad ('DOING_AUTOSAVE') && DOING_AUTOSAVE) returnera $ post_id;  om ('wptuts_quiz' == $ _POST ['post_type'] && current_user_can ('edit_post', $ post_id)) $ question_answers = isset ($ _POST ['quiz_answer']))? ($ _POST ['quiz_answer']): array (); $ filtered_answers = array (); foreach ($ question_answers som $ svar) array_push ($ filtered_answers, sanitize_text_field (trim ($ answer)));  $ question_answers = json_encode ($ filtered_answers); $ 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);  annars returnera $ post_id; 

Post-ID skickas automatiskt till denna funktion. Ursprungligen utför vi valideringar för nonce värde och autosave. Det viktigaste innan du sparar är valideringen av posttyp.

Om du släpper in posttypskontrollen kommer den här koden att utföras för alla posttyper i din WordPress-installation, inklusive vanliga inlägg, vilket kan leda till inkonsekventa data.

Slutligen får vi värdena i våra svarfält och korrekt svarfält som ska sparas i databasen med hjälp av update_post_meta fungera. Alla anpassade fält detaljer kommer att sparas i post_meta tabell.

Nu har vi slutfört frågeställningen. Eftersom vi använder slumpmässigt genererade frågesporter kan du behöva massor av frågor för att se det här pluginet i aktion. Så gör dig redo genom att lägga till ytterligare frågor innan vi genomför frågesporten i nästa del.


Quiz Settings Page

Även om det inte är obligatoriskt är det perfekt att ha en inställningssida för vårt plugin så att administratören kan anpassa sig efter deras preferenser.

Så låt oss implementera en enkel inställningssida för att innehålla frågans varaktighet och antal frågor per frågesport. Vi måste genomföra admin_menu handling i konstruktören.

 add_action ('admin_menu', array ($ this, 'wpq_plugin_settings'));
 funktion wpq_plugin_settings () // skapa ny menyn top_menu add_menu_page ('WPTuts Quiz Settings', 'WPTuts Quiz Settings', 'administrator', 'quiz_settings', array ($ this, 'wpq_display_settings'));  funktion wpq_display_settings () $ html = '

Välj dina inställningar

'. wp_nonce_field ('uppdateringsalternativ'). '

'; echo $ html;

Vi kan använda add_menu_page funktion för att lägga till en inställningssida i adminområdet. De wpq_display_settings funktionen används för att implementera visningselementen på inställningssidan.

Vi har använt två textfält för varaktighet och frågor per frågesport. Forminsändning och datasparande kan hanteras manuellt med hjälp av anpassad kod, men WordPress ger oss en förenklad metod för uppdatering av alternativ.

I denna metod måste du ställa in formuläråtgärden till options.php fil. Då måste du skapa ett dolt fält som kallas åtgärd för att innehålla värdet av "uppdatering'. Slutligen måste vi ha ett annat dolt fält som heter page_options att innehålla namnen på de två textfälten som ska uppdateras.

Se till att du använder de här inbyggda alternativuppdateringsteknikerna i scenarier där kraven för att spara fälten inte är komplexa.

När knappen Skicka skickas, kommer formuläruppgifterna att uppdateras automatiskt utan någon anpassad kod.


Vad kommer härnäst

Vi har avslutat bakgrunden för vår quiz-plugin. Nu kan du skapa frågor och göra dig redo för nästa del där vi kommer att använda dessa frågor för att dynamiskt skapa frågesporter.

Fram till dess, låt mig veta det bästa sättet att genomföra en dynamisk frågesport på fronten. Tänk på att endast en fråga kommer att visas i taget. När användaren begär en fråga kan han flytta till nästa fråga.

Ser fram emot dina förslag.