{"id":256792,"date":"2025-11-04T15:06:49","date_gmt":"2025-11-04T15:06:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/interactive-quiz\/"},"modified":"2025-11-04T15:09:58","modified_gmt":"2025-11-04T15:09:58","slug":"kd-quiz","status":"publish","type":"plugin","link":"https:\/\/ml.wordpress.org\/plugins\/kd-quiz\/","author":14778532,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.4.0","stable_tag":"1.4.0","tested":"6.8.5","requires":"5.4","requires_php":"7.2","requires_plugins":null,"header_name":"KD Quiz \u2013 Interactive Quiz","header_author":"Nikos Konstas","header_description":"Allows you to create a simple interactive quiz on any page or post","assets_banners_color":"5895bb","last_updated":"2025-11-04 15:09:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/nkonstas\/wordpress-quiz","header_author_uri":"https:\/\/twitter.com\/nkonstas","rating":0,"author_block_rating":0,"active_installs":0,"downloads":177,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.0":{"tag":"1.4.0","author":"nkonstas","date":"2025-11-04 15:09:58"}},"upgrade_notice":{"1.4.0":"<p>Required for WordPress.org review parity: admin scripts now load through <code>wp_enqueue_script()<\/code> and the build\/release tooling regenerates every asset before packaging.<\/p>","1.3.5":"<p>Security tidy-up to satisfy the WordPress.org review: auto-insert settings now escape their <code>disabled<\/code> attributes and the bundled assets were rebuilt for 1.3.5.<\/p>","1.3.4":"<p>Quality-of-life release: new JSON example in the importer, inline quiz-setting help, auto-insert scoped by container with pixel distances, updated review checklist, and rebuilt bundles for the 1.3.4 package.<\/p>","1.3.3":"<p>Update to align with the latest WordPress.org security review feedback and ensure migrations honour object caching.<\/p>","1.3.2":"<p>Update for a clearer \u201cMark as correct\u201d workflow inside the question editor, plus refreshed admin styling.<\/p>","1.3.1":"<p>Maintenance release focused on the JSON importer UX: failed imports now return you to the admin screen with clear messaging, plus refreshed assets.<\/p>","1.2.0":"<p>Compatibility and security hardening release. Please update to ensure translator hints, escaping, nonce verification, and import checks match current WordPress guidelines.<\/p>","1.1.0":"<p>Please clear any cached assets so the updated JavaScript receives the latest option keys and security improvements.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3389774,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3389774,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3389774,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3389774,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3389774,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"Manage questions and see engagement metrics in the WordPress admin.","2":"Configure button text, grades, and auto-insert settings.","3":"Import a batch of questions from JSON.","4":"Front-end quiz card with score summary."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[221,5298,307,583,80],"plugin_category":[43,47,53],"plugin_contributors":[250246],"plugin_business_model":[],"class_list":["post-256792","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax","plugin_tags-education","plugin_tags-engagement","plugin_tags-quiz","plugin_tags-shortcode","plugin_category-customization","plugin_category-education-and-support","plugin_category-ratings-and-reviews","plugin_contributors-nkonstas","plugin_committers-nkonstas"],"banners":{"banner":"https:\/\/ps.w.org\/kd-quiz\/assets\/banner-772x250.jpg?rev=3389774","banner_2x":"https:\/\/ps.w.org\/kd-quiz\/assets\/banner-1544x500.jpg?rev=3389774","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kd-quiz\/assets\/icon-128x128.jpg?rev=3389774","icon_2x":"https:\/\/ps.w.org\/kd-quiz\/assets\/icon-256x256.jpg?rev=3389774","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/kd-quiz\/assets\/screenshot-1.jpg?rev=3389774","caption":"Manage questions and see engagement metrics in the WordPress admin."}],"raw_content":"<!--section=description-->\n<p>KD Quiz adds an admin-friendly custom post type for quiz questions, plus a front-end shortcode that renders an animated flash card interface. The plugin includes:<\/p>\n\n<ul>\n<li>Four default styles with a custom option for bespoke theming.<\/li>\n<li>AJAX-powered question rotation, view tracking, and scoring without page reloads.<\/li>\n<li>Optional automatic insertion based on content headings so you can drop quizzes into long-form articles without shortcodes.<\/li>\n<li>JSON import\/export to seed quizzes in bulk from external systems.<\/li>\n<\/ul>\n\n<p>All user inputs are sanitized, escaped, and routed through WordPress nonces to protect your admin users and visitors. No third-party services are contacted.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>kd-quiz<\/code> folder to <code>wp-content\/plugins\/<\/code> or install it via the WordPress dashboard.<\/li>\n<li>Activate <strong>KD Quiz \u2013 Interactive Quiz<\/strong> through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Visit <strong>Quiz Questions \u2192 Add New Question<\/strong> to create your first question and mark the correct answer.<\/li>\n<li>Configure global behaviour under <strong>Quiz Questions \u2192 Settings<\/strong> (question count, styles, auto-insert rules, and text replacements).<\/li>\n<li>Place the <code>[kdquiz]<\/code> shortcode in any post or page, or enable automatic insertion to let the plugin place quizzes after targeted headings. (The legacy <code>[kd-quiz]<\/code> shortcode continues to work for existing content.)<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='how%20do%20i%20change%20the%20quiz%20styling%3F'><h3>How do I change the quiz styling?<\/h3><\/dt>\n<dd><p>Use <strong>Quiz Questions \u2192 Settings<\/strong> to pick one of the bundled styles or choose <strong>Custom<\/strong> and enqueue your own CSS targeting <code>.kdquiz_style_custom<\/code>.<\/p><\/dd>\n<dt id='can%20i%20import%20questions%20from%20another%20system%3F'><h3>Can I import questions from another system?<\/h3><\/dt>\n<dd><p>Yes. Head to <strong>Quiz Questions \u2192 Import Questions<\/strong>, paste a JSON payload with <code>questionText<\/code>, <code>options<\/code>, <code>correctOptionId<\/code>, and <code>explanation<\/code>, then submit the form.<\/p><\/dd>\n<dt id='does%20the%20plugin%20track%20personal%20data%3F'><h3>Does the plugin track personal data?<\/h3><\/dt>\n<dd><p>No. The plugin stores aggregate view and answer counts per question only.<\/p><\/dd>\n<dt id='1.4.0'><h3>1.4.0<\/h3><\/dt>\n<dd><p>Switches the Edit Question page to enqueue its JavaScript through WordPress core, adds a reusable admin helper script, and rebuilds the packaged assets for 1.4.0.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Replaces the inline <code>&lt;script&gt;<\/code> block on the Edit Question screen with a proper admin enqueue that loads a dedicated asset (<code>includes\/kd-quiz-editing.php<\/code>, <code>assets\/kd-admin-answer-sync.js<\/code>).<\/li>\n<li>Adds a minified build of the new admin helper and updates the npm build chain to regenerate it along with the existing bundles (<code>assets\/kd-admin-answer-sync.min.js<\/code>, <code>package.json<\/code>).<\/li>\n<li>Ensures <code>build-release.sh<\/code> installs dependencies when needed, runs <code>npm run build<\/code>, and then packages the freshly compiled assets into the release ZIP.<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Escapes any optional <code>disabled<\/code>\/<code>aria-disabled<\/code> attributes emitted by the auto-insert settings UI so the markup stays PHPCS-compliant (<code>includes\/kd-quiz-settings.php<\/code>).<\/li>\n<li>Documents the reviewer feedback follow-up in <code>ReviewFixes.txt<\/code> and bumps the plugin version metadata to 1.3.5.<\/li>\n<li>Recompiles the front-end\/admin assets so the distributed package advertises version 1.3.5.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Adds an inline JSON example below the importer textarea so editors can copy the expected payload shape (<code>includes\/kd-quiz-import.php<\/code>).<\/li>\n<li>Adds concise help text under each Quiz Settings control so site owners know how auto-insert and styling options behave (<code>includes\/kd-quiz-settings.php<\/code>).<\/li>\n<li>Switches the minimum-distance control to pixels, introduces a container selector, and disables the placement fields unless auto insertion is active so automatic quizzes stay within the main content area (<code>includes\/kd-quiz-settings.php<\/code>, <code>assets\/kd-quiz.js<\/code>).<\/li>\n<li>Replaces the single heading selector with dedicated \u201cinsert before\u201d, \u201cinsert after\u201d, and \u201cnever insert inside\u201d lists so auto placement follows predictable priorities (<code>includes\/kd-quiz-settings.php<\/code>, <code>assets\/kd-quiz.js<\/code>).<\/li>\n<li>Adds a toggle to enable verbose console logging so you can trace heading selection and offsets while debugging auto placement (<code>includes\/kd-quiz-settings.php<\/code>, <code>assets\/kd-quiz.js<\/code>).<\/li>\n<li>Documents all security\/prefix fixes in <code>ReviewFixes.txt<\/code> for easy reviewer handoff (e.g. <code>ReviewFixes.txt:1<\/code>).<\/li>\n<li>Rebuilds scripts and metadata so the distributed bundles advertise version 1.3.4.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Escapes the \u201cCorrect choice\u201d status pill output and adds a nonce check to the reset notice flow to address WordPress.org review feedback.<\/li>\n<li>Replaces the legacy direct SQL migration with <code>wp_update_post()<\/code> to respect object caching and coding standards.<\/li>\n<li>Rebuilds the front-end metadata so the packaged assets report version 1.3.3.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Refreshes the Edit Question admin UI with a clear \u201cMark as correct\u201d pill and row highlight so the chosen answer stands out.<\/li>\n<li>Adds helper text and status chips to reinforce which answer will be saved as correct.<\/li>\n<li>Rebuilds admin styles and the bundled JavaScript for the 1.3.2 release package.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Improves the JSON import UX by redirecting back to the import screen with contextual error messaging when the payload is missing or invalid.<\/li>\n<li>Adds nonce-protected status flags so both success and error notices render in the proper admin screens.<\/li>\n<li>Rebuilds all assets for the 1.3.1 maintenance release.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Hardened admin reset\/import handlers by routing through <code>admin-post.php<\/code> with nonce and capability checks to satisfy the WordPress.org review.<\/li>\n<li>Standardised on the <code>kdquiz<\/code> prefix across CPTs, AJAX, styles, and shortcodes while keeping legacy identifiers compatible for existing installs.<\/li>\n<li>Normalised stored style slugs and added a <code>[kd-quiz]<\/code> shortcode alias so upgrades require no manual content changes.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Random fetch fallback to ensure a full question set even when all are marked viewed (keeps VIP-safe query semantics).<\/li>\n<li>Packaging and i18n: include <code>\/languages<\/code> in release; remove discouraged <code>load_plugin_textdomain()<\/code> call.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Change plugin name to \u201cKD Quiz \u2013 Interactive Quiz\u201d to align with the desired WordPress.org slug <code>kd-quiz<\/code>.<\/li>\n<li>Maintenance: rebuild minified assets and package script updates.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Addressed WordPress Plugin Checker feedback: added translators comments for placeholder strings, ensured proper escaping in admin UI, and sanitized\/validated AJAX and form inputs with nonce checks.<\/li>\n<li>Replaced direct SQL in import duplicate checks with core APIs; tightened import notice handling.<\/li>\n<li>Removed error_log usage; added <code>kdquiz_include_failed<\/code> hook for observability.<\/li>\n<li>Updated \"Tested up to\" to 6.8 and refreshed front-end metadata; minor copy polish in short description.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Updated option, meta, and function prefixes to the <code>kdquiz_<\/code> namespace to avoid conflicts.<\/li>\n<li>Hardened nonce checks, request sanitization, and output escaping across AJAX handlers and admin forms.<\/li>\n<li>Refreshed readme to pass the WordPress.org validator and declared testing up to WordPress 6.5.<\/li>\n<\/ul>","raw_excerpt":"Embed a lightweight, card-style quiz with AJAX rotation and scoring to boost engagement anywhere on your site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/256792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=256792"}],"author":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nkonstas"}],"wp:attachment":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=256792"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=256792"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=256792"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=256792"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=256792"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=256792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}