Category
Technical
10 articles on technical.
2026-05-13Importing Quizzes by Position Instead of by ID: A Cardinal MistakeThe first quiz bug we caught after launch wasn't about grading at all — it was about which question a student was actually seeing. Our importer was wiring questions to answers by position (the cardinal number) instead of by the real ProQuiz question ID. Some students got the wrong question on the wrong screen.2026-05-12Three of Three Questions Correct, Zero of Zero Points: The LearnDash ProQuiz Points BugA migrated quiz that grades every answer correctly but reports '0 of 0 points' looks like a frontend bug and is actually a one-column DB problem. Here's the full diagnosis, the fix, and the importer patch so it doesn't happen again.2026-05-10Bundling PDF.js in a WordPress Plugin (Without a CDN)Why Composer isn't the right tool, why CDNs are out for clients with strict third-party policies, and how to ship pdf.js + the worker locally with wp_localize_script. A working pattern for any production WordPress plugin that needs to render PDFs.2026-05-09Mapping Thinkific Users to WordPress When You Already Have a User BaseIf WordPress already has users — newsletter subscribers, blog commenters, old students — you can't just bulk-insert Thinkific users. Email collisions are the rule, not the exception. Here's the merge policy we use.2026-04-30Thinkific Has Two APIs. Here's What's in Each One.Thinkific exposes both a REST API and a GraphQL API. Most exporters use one or the other and lose information. A complete migration uses both — REST for enrollments and custom fields, GraphQL for course structure and quizzes.2026-04-22Quizzes Are a Lesson Type in Thinkific. They're Not in LearnDash. Here's How We Bridge It.In Thinkific a quiz is a lesson — `lessonType: QUIZ` sitting alongside videos and PDFs in a chapter. In LearnDash, sfwd-quiz is a separate post type. The mismatch is the single most consequential design decision in any Thinkific-to-LearnDash migration.2026-04-15Thinkific GraphQL Rate Limits: A Field Guide to Cost BudgetsThinkific's GraphQL API has two ceilings that aren't documented prominently: 1000 cost units per query and 2000 cost units per minute. Hit either and you get RATE_LIMITED or MAX_QUERY_COST_EXCEEDED. Here's how the numbers actually behave and what to do about them.2026-02-25The Enrollment Bug That Almost Ruined Our MigrationThinkific's REST API returns all enrollments for users in a queried course — not just enrollments for that specific course. We discovered this cross-contamination bug affecting 1,439 records across 13 courses.2026-02-24Video Protection Without DRM: A Layered Approach for Course CreatorsFull DRM is overkill for educational content. Here's our layered stack: S3 bucket policies with referrer restrictions, HTML5 controlsList attributes, CloudFront signed cookies, and player-level hardening.2026-02-24WordPress Hook Suspension: Why LearnDash Imports Crash and How to Fix ItLearnDash and BuddyBoss hooks trigger template rendering during CLI bulk post creation, crashing the import process. The fix: suspend dangerous hooks during import with targeted hook removal and restoration.