What this plugin is for
LearnDash lets one question belong to more than one quiz. It is a real feature — the quiz builder has a question search precisely so you can pull an existing question into a new quiz, and LearnDash has a Shared Questions setting that governs it. Reuse is the right thing to do when you are maintaining a question bank.
The problem is that reuse is invisible. Nothing in the LearnDash admin tells you that the question you are about to rewrite is also sitting in the final exam. You edit it once and three quizzes change, and you find out weeks later when a learner’s score does not match the answer key.
This plugin makes reuse visible. It adds one column, one warning, and one report — and it never writes to your questions or quizzes.
Requirements
- WordPress 5.8 or later
- PHP 7.4 or later
- LearnDash LMS
- An account that can edit posts (the report requires
edit_posts, so course authors and editors can use it, not only administrators)
Installation
- Install the zip through Plugins → Add New → Upload Plugin, or upload the folder to
/wp-content/plugins/. - Activate it.
- Go to LearnDash LMS → Questions. The new Used in column is there immediately.
- Go to LearnDash LMS → Question Usage for the full report. If LearnDash’s menu is not present the report appears under Tools instead.
There is nothing to configure. No settings page, no options.
The “Used in” column

Every row on the Questions list now tells you where that question is actually used.
| What you see | What it means |
|---|---|
| One quiz name | Normal. The question belongs to that quiz and nothing else. Edit freely. |
| Several quiz names, plus (shared by N quizzes) | The question is reused. Editing it changes every quiz listed. |
| Not used, in red | No quiz references this question at all. |
Quiz names are links, so you can go straight from a question to any quiz that uses it.
Note that this is deliberately not the same thing as LearnDash’s own Assigned Quiz column. Assigned Quiz shows the single quiz recorded on the question; Used in shows every quiz whose question list actually contains it. When those two disagree, the second one is the one that affects learners.
The shared-question warning

Open a shared question for editing and a notice appears above the title:
Shared question. This question is used by 2 quizzes. Editing it will change all of them.
Module 1 Quiz · Final Exam
This is the part of the plugin that actually prevents mistakes. It appears before you have typed anything, it names the quizzes rather than just counting them, and it appears only on questions that really are shared — so it stays meaningful instead of becoming noise you learn to ignore.
The notice does not block the edit. You may well have opened the question precisely because you want to fix it everywhere. It just makes sure that is a decision rather than an accident.
The report

LearnDash LMS → Question Usage gives you the whole picture in one screen, opening with a one-line summary: how many questions are used by at least one quiz, how many are shared, and how many are unused.
Questions shared across quizzes
Every question used by more than one quiz, with all of its quizzes listed. This is the list to look at before a round of question edits, and the list to hand to anyone new who is going to work on the bank.
Questions not used in any quiz
Every question post no quiz references, with its post status. Drafts and published questions both appear.
Read this list as a review queue, not a delete queue. A question shows as unused for several innocent reasons: it is a draft you have not attached yet, it was written for a quiz that has since been rebuilt, or it was imported and never placed. Some are clutter and some are work in progress, and only you can tell which is which. The Status column is the fastest way to sort one from the other — a draft is usually intentional, a published orphan usually is not.
Limits
The report examines up to 2,000 questions and 2,000 quizzes per run, and lists the first 200 of each result set on screen, with a line telling you the true total when there are more.
How the data stays current
Working out which quiz uses which question means reading every quiz on the site, so the result is cached rather than recomputed on every page load — otherwise the Questions list would slow to a crawl on a site with a large bank.
The cache is kept honest in three ways:
- It expires on its own after ten minutes.
- It is cleared automatically whenever a quiz or a question is saved, and whenever any post is deleted.
- You can clear it yourself with the Refresh data button on the report.
In practice you should never see stale data. If you do — for instance after a bulk import that wrote directly to the database and never fired a save — press Refresh data.
How usage is resolved
The plugin asks LearnDash first, through its own learndash_get_quiz_questions() API, so it sees exactly the relationships LearnDash sees, including questions attached through the quiz builder’s shared-questions feature.
Where that returns nothing useful — which happens on older installs and on quizzes carrying legacy ProQuiz data — it falls back to looking up questions by their recorded quiz association. The effect is that the plugin degrades gracefully across LearnDash versions instead of reporting an empty map and quietly telling you nothing is shared.
Troubleshooting
The “Used in” column is missing
Check the Questions list is the LearnDash one at LearnDash LMS → Questions, and that Screen Options at the top right has not hidden the column.
Everything shows as “Not used”
That usually means the usage map came back empty. Press Refresh data on the report first. If it persists, your quizzes may hold their question associations only in legacy ProQuiz tables that the current LearnDash API does not expose.
A question I know is shared shows only one quiz
The second quiz may hold the question through a legacy association rather than through the quiz builder. Open that quiz’s builder and re-save it to bring its question list up to date, then refresh.
The report is slow to load the first time
The first load after a cache flush reads every quiz. Subsequent loads within ten minutes come from the cache.
Frequently asked questions
Does this change my questions or quizzes?
No. It is entirely read-only. It reads existing relationships and displays them; it writes nothing but its own cache entry.
Can I delete unused questions from the report?
Not from this plugin — it deliberately offers no delete action, because “unused” and “unwanted” are not the same thing. Open the question and trash it in the usual way once you have decided.
Does it work alongside other LearnDash add-ons?
Yes. It reads data and adds an admin column and a screen. It does not alter LearnDash behaviour.
Will it work with a very large question bank?
Yes, within the 2,000-item scan limit described above. The cache means the cost is paid once every ten minutes rather than on every list-table load.
Uninstalling
Deactivating removes the column, the warning and the report. The only thing the plugin ever stores is a single cached transient, which expires by itself. Nothing belonging to LearnDash is touched.
