Skip to content
Learnomy

Question Pools and Per-Question Timers

Pro feature

Question pools draw a random set of questions from your question bank each time a student starts the quiz, so no two attempts are identical. Per-question timers put a countdown on individual questions and enforce it on the server. Both are configured on the quiz's Advanced settings.

Pro feature. Question pools and per-question timers are part of the Advanced Quizzes extension in Learnomy Pro.

What you can do

  • Draw a random selection of N questions from the question bank at the moment each student starts the quiz, so every attempt is a different paper.
  • Filter the pool draw by question category, difficulty range, and question type, so the random set still matches the exam you intend.
  • Give students a fresh, unpredictable question set on each attempt to make sharing answers far less useful.
  • Put a countdown on individual questions, set in seconds per question.
  • Have the timer enforced on the server at submit -- a question whose time ran out is treated as timed out, not just visually flagged in the browser.
  • Show a live per-question countdown badge on the quiz player, with auto-advance on timeout on the Focused layout.

Question Pools and Per-Question Timers first view

How to use it

Set up a question pool

  1. Make sure Learnomy Pro is active and the Advanced Quizzes extension is enabled.
  2. Build up your Question Bank with categorised questions, and set a difficulty (1 to 5) on questions you want to draw by difficulty. See Question Bank.
  3. Open the quiz and go to its Advanced settings. Open the Pool card.
  4. Choose the criteria for the draw: the question categories to draw from, an optional difficulty range, an optional question type, and the count (how many questions to select, 1 to 200).
  5. Save. From now on, each time a student starts the quiz, Learnomy selects that many random questions from the bank matching your criteria and builds the attempt from them.

Set a per-question timer

  1. In the same Advanced settings, open the Timer card.
  2. Set the number of seconds for a question. A value of zero means no timer on that question.
  3. Save. On the quiz player each timed question shows a countdown badge; on the Focused layout the player auto-advances when a question's time runs out.
  4. Timers are also enforced on the server when the attempt is submitted, so a client that ignores the countdown still has over-time questions marked as timed out.

Settings and options

Setting Where Values Notes
Pool categories Advanced settings > Pool card question category IDs The categories the random draw pulls from.
Difficulty range Advanced settings > Pool card min and max, each 1 to 5 Restricts the draw to questions within the difficulty band.
Question type Advanced settings > Pool card a question type, optional Restricts the draw to one type when set.
Count Advanced settings > Pool card 1 to 200 How many questions to select per attempt.
Per-question timer Advanced settings > Timer card seconds (0 = none) Countdown for that question, enforced on the server at submit.

The pool draw runs at attempt start, before any conditional logic, so the drawn set defines the questions the rest of the attempt works from.

For developers

  • Config storage: question pools, per-slot timers, conditional-logic rules, and rubrics are all stored in one dedicated table, lrn_pro_aq_config (config_type + object_id, unique together), managed by Learnomy_Pro\Extensions\Advanced_Quizzes\Models\Aq_Config (get() / save() / remove()). Earlier releases stored each of these as an individual wp_options row (learnomy_quiz_pool_{quiz_id}, learnomy_quiz_slot_timer_{slot_id}, and so on) -- one option per quiz/question/slot, unindexed and unbounded. A one-time migration (Aq_Config::migrate_from_options(), run on the advanced-quizzes extension's activation) moves any existing rows into the table and deletes the old options, so a site upgrading from an earlier version keeps its pools and timers intact. Pool_Service (create_pool / get_pool / resolve_pool) and the timer REST handlers both read and write through Aq_Config, not wp_options, directly.
  • Pool draw: resolve_pool() selects the questions through the Free model Learnomy\Models\Question::pool_match( $filters, $count ); it is wired into attempt start via the learnomy_pro_quiz_filter_questions filter (priority 5, before conditional logic).
  • Timer REST: GET / POST /learnomy-pro/v1/quiz-slots/{id}/timer read and save a slot's seconds.
  • Timer enforcement: timer data is injected into the player through the learnomy_quiz_player_context filter; the server enforces elapsed time on the learnomy_quiz_submitted action. The live countdown badge and Focused-layout auto-advance are driven by assets/js/quiz-player-timers.js.

Related