Gotta catch ’em all!


I created a plugin for WordPress that you can use to store and retrieve xAPI statements (“results”) from H5P content types.

Don’t become butter scraped over too much bread!

H5P does neither have the user management features of moodle nor does if offer the tools for analyzing data like Learning Locker does. I love it for that. I love it, because it’s done on purpose.

H5P is not intended to become a silver bullet system to “end” all silver bullet systems. It will not become a full-blown Learning Management System. It will not allow you to analyze all the data you may collect. It will focus at what it is good at: enabling you to create, remix and share interactive content. However, it doesn’t quite stop there.

There’s more than meets the eye!

Although you may not notice it, H5P makes use of some established standards that allow you to build your own solutions that may be tailored to your particular needs. For example, there is the so called Experience API or xAPI. It’s an open standard that is used to communicate data about learners’ experiences to other platforms:

  • Tom attempted fill in the blanks test.
  • Lisa scored 100 % in the multiple choice quiz.
  • Alice completed the essay.

It actually is a little more powerful. And a little more complicated. Whatever. Let’s simply pretend these statements were test results and let’s say that you can use the interface to send this kind of information to a platform that’s specialized for storing, retrieving and analyzing the data, possibly giving you some valuable insight into where you could help your students.

This is great. And you can choose and use the best tools for the job. Yet, with great freedom comes great inconvenience. At least that’s how some people may perceive it. They don’t want to configure lots of stuff or to switch systems for different tasks. And in some cases, they just want to get a small thing done. All they need is a screwdriver, not a power drill. If you’re one of those people and if you’re using WordPress, I may have something for you.

Gotta catch’em all!

I created a plugin that allows you to catch all those tiny xAPI statements that H5P emits. You can store and retrieve them. Of course, I had to name the plugin H5PxAPIkatchu 😀 (Yes, I know, there’s an additional for a reason).

Gotta catch 'em all!

I might train it, so it could possibly learn some new tricks. However I will not — I repeat — I will not turn it into a power drill. It’s a screwdriver. If you e.g. need to analyze the data, you can export them to a CSV file and import them to a spreadsheet program (boring) or maybe to some Jupyter environment with scikit-learn for some sophisticated machine learning action (cool). And, since it’s open source software, feel free to contribute, fork or build upon!

A word of advice …

Using the plugin is not necessarily the smartest thing to do. One of those xAPI statements is not very large, let’s roughly say up to 2 KB in average. Let’s cut that down because the plugin is not intended to store everything. We might have 1 KB per statement. That’s tiny, right? But each H5P content type typically sends out different statements. Let’s assume five in average. Now we have 5 KB and need to multiply those with the number of people that use the content type. This number will grow over time …

You’ll have to do the math yourself for your particular setting. Just make sure your database has enough storage capacity. There’s a reason why there are programs and platforms that are specialized for tackling this job …

45 Replies to “Gotta catch ’em all!”

  1. Hi!
    I installed your plugin. It looks like it didn’t create a necessary table in the db (wp_h5pxapikatchu_object) because I’m getting a bunch of error logs in my server logs saying the table doesn’t exist (which I confirmed by looking at the database.)

    Would you please update the plugin, or just tell me what needs to be in that table, and I’ll create it myself?

    Thanks a ton!


  2. Thanks! I looked further up in the logs, and it turned out that the table creation statement had character encoding and collation statements at the end that my server didn’t like. I ended up removing those and now it works!

    Thanks again!

    1. Glad you could figure it out.

      The way I implemented it is following the pattern described in the official WordPress documentation. It’s strange that you do not encounter that problem more frequently with other plugins.

      Anyway, I may have stumbled upon a bug when browsing my code, and I’ll check that shortly. So, thanks for reaching out 🙂

  3. Hello,

    I’ve installed your plugin onto one of our test sites but I can’t seem to get it to display the results within the Dashboard.

    I’ve created a short (2 mins 15 secs) video detailing what I’m seeing on the site:

    Any advice you could give me would be great.

    Many thanks


    1. Hi Simon!

      I’ll have time to check your video thoroughly tonight, but from what I saw at a glance it could be two things:
      1) You need to reload a post containing H5P content a) after installing the plugin or b) after changing the settings. Otherwise, the post a) doesn’t know how to listen to the xAPI statements or b) still has the old settings.

      2) You seem to have multi-site enabled. I am actually not sure if there’s some extra stuff regarding e.g. WordPress options that I need to take care of. Never looked into that.


      1. Hi Oliver,

        Thanks for getting back to me so quickly.

        I’ve reloaded the post in question several times but the results don’t appear to show in the Dashboard.

        Also, even when the plugin is activated at the network level it only adds the 4 tables (actor, object, result & verb) to the site that I need them for. I’m not sure whether this was just luck or whether something I did made that happen. There are h5p_results tables for every site on the network as the H5P plugin is activated at network level.



        1. I never tested the plugin on a multisite version of WordPress. Guess that was a mistake 😉 I’ll have a look how database tables and options should be handled properly when using the multisite option.

        2. Hi Simon!

          I just quickly installed a multisite instance and can confirm your observation. When activating the plugin on site level, the main table is not being created for the site, the other four are. Not sure why, but that’s why the plugin can’t write the xAPI statements although they are correctly intercepted. I’ll have to look into how WordPress handles multisite instances.


        3. Hi again!

          First investigation revealed a simple bug that seems to have slipped in, although I am not sure how as I didn’t touch that part of the code recently. The bug would not hurt if you upgraded from a previous version, but it would not create the required tables when installing the plugin for the first time.

          At first glance, the plugin seems to work on multisite now, too, but I’ll check out what I might do to better support multisite handling in the future.

          Thanks for reporting!


          1. Hi Oliver,

            Should I upgrade the plugin then (I can see there is a later version available)?

            If I do upgrade would this potentially solve the issue for me?



  4. Hi Oliver,

    Just to let you know, the update has solved my issue.

    It’s now working great.

    Many thanks for your help.


  5. Good morning (I apologize for the English), I really appreciate the plugin, great job!
    But I have some problem and request if solvable.

    The most important problem: if I view an h5p question or presentation on a page, H5PxAPIkatchu correctly tracks access or response. I would need to insert these elements into a course created with WPLMS, but in this case H5PxAPIkatchu does not track anything, the tracing appears correctly in the external LRS Watershed. Is there a solution? Unfortunately if I do not solve this problem the plugin becomes useless for me.

    If the previous problem is resolved, in order not to force the instructor to enter the backend of the site, would it be possible to view the results of H5PxAPIkatchu on a page of the frontend of the site?

    Finally, but this is a problem related not so much to H5PxAPIkatchu but to h5p in general, if I use the h5p Iframe Embedder module, I do not get any kind of tracking either in H5PxAPIkatchu nor in Watershed, and this even if I display the content in a page at outside the course created in WPLMS. Any ideas about it?
    Thank you

    1. Hi dadoge!

      Your English is very well!

      I am not familiar with WPLMS unfortunately, so I neither know how it integrates H5P nor how it sends the xAPI statements to Learning Record Stores. That would require some digging.

      Showing results in the frontend is currently not possible, but wouldn’t be a huge effort to implement. Should be pretty straightforward to use shortcodes in order to put the table into a post or page.

      Finally, it is in fact simply not possible in general to track xAPI statements from content that’s embedded with iFrame embedder.


  6. thanks for the reply (for the English compliment to google translator), I will ask the support of wpmls and if I find a solution it will be a pleasure to share it.


  7. Hi hi, I really appreciate the possibility to store some data. We would like to store data in one filled out questionnaire. I installed the plug-in or better our professor installed it for us. But I can’t see anything using one questionnaire. I need some ideas, where I can look for the correct implementation. I assume that I or my prof. didn’t do some adjustments which are necessary or elementary. But now we are lost. The semester ends in two weeks and we have to finalize our site, but it didn’t work how we expected it. I really appreciate one helping idea or something like that. Thank you very much.

    1. Hi Dana!

      I am not sure if I fully understand what a) your scenario and setup is like and b) what your goal is.

      If your main goal is to add some questionnaire functionality to WordPress, then H5P may not be the best tool to begin with. I am pretty confident that there are other plugins that provide better questionnaire support.

      If it “must” be H5P, then you (your professor) should make sure to check the “Enable LRS dependent content types” which will then allow to install and use the “Questionnaire” content type. That is a very basic questionnaire tool however. If that suffices, then you can indeed use H5PxAPIkatchu to track the responses if you put that H5P.Questionnaire content into a post or page. The responses will be stored as xAPI fields in a separate database table and you can export that table via the H5PxAPIkatchu menu item (given that you have the WordPress permission to access it) to analyze it further.


  8. Hallo Oliver,

    leider habe ich auch das Problem mit H5PxAPIkatchu ” Es sind keine xAPI-Informationen gespeichert.”
    Und nicht wirklich Ahnung ….
    Ich habe ein paar Paar Fragen mit H5?erstellt und würde die Ergebnisse gern auswerten/speichern.
    Wie muss ich da grundsätzlich vorgehen ?

      1. Ja, auch versucht anzuwenden aber leider erfolglos.
        Ich habe einen Question Set mit H5Pund es auf eine der Seiten meiner Homepage veröffentlicht. Ich nach der Installation das die Fragen wieder runter genommen und neu online gestellt. In den Optionen I

        alles aufzeichnen ein Haken gesetzt

        und mit dem Handy den Test gemacht .

        Aber leider keine Aufzeichnung.

        Danke im Voraus

    1. Das nötige Skript wird dem Inhalt nicht einmal hinzugefügt, also scheitert es schon irgendwo serverseitig.

      Ich bin nicht sicher, wie die H5P-Hooks bei Lazy-Loading funktionieren, aber du hast da jedenfalls etwas zu aktiviert, und ggf. ist das das Problem.

      Du nutzt außerdem den Embed-Code von H5P-Inhalten statt den Shortcode. Warum? Das kann unter Umständen das Aktivieren der Option zum Einbetten erfordern. Sollte bei lokalem Einbetten eigentlich nicht passieren, aber das kann von den Servereinstellungen abhängen.

      Andernfalls hilft eventuell ein Blick in die PHP-Fehlerlogdatei.

      Wenn du ein paar error_log()-Statements einbauen willst, um zu schauen, wo die Server-Seite aussteigt: Hier wird geprüft, ob das Skript dem Inhalt hinzugefügt werden soll

  9. Danke erst mal für die Schnelle Antwort. Kenne mich leider nicht so gut mit den Sachen aus, werde es aber mal versuchen.

    1. Okay. Zusatzfrage von mir: Safari?

      Der unterstützt offenbar den “HTTP_SEC_FETCH_SITE”-Header nicht, und bei eingebetteten Inhalten kann dann nicht ermittelt werden, ob der Inhalt auf demselben Server liegt (wie bei dir) oder auf einem fremden. Da ich das in diesem Fall lieber restriktiv gehandhabt habe, müsstest du die “Einbetten-erlauben”-Option in diesem Fall in den Einstellungen setzen, wenn du unbedingt den Embed-Code benutzen willst – was aber innerhalb von WordPress mit H5P eigentlich keinen Sinn ergibt.

  10. Ja Safari. Aber einbetten ist nicht notwendig für mich.
    Leider kann ich die Ergebnisse nicht auswerten. Für mich wäre es wichtig zb Name email und die Antworten zu erfassen und auszuwerten. Wenn ich das richtig verstanden habe ist es mit diesem plugin nicht möglich, oder ?

    Falls nein könntest du mir ein anderes plugin empfehlen ?

    1. Safari also. Mal wieder …

      Doch, das Plugin ist genau dafür da. Die E-Mail-Adresse steht bei eingeloggten Personen direkt in der Spalte “Akteur ID”, der Nutzername in der Spalte “Akteur Name”. Und die Antworten stehen unabhängig vom Angemeldetsein – wenn welche übertragen wurden, in der Spalte “Ergebnis Antwort”.

      Ein anderes WordPress-Plugin, das die xAPI-Statements von H5P nutzt, ist mir nicht bekannt. Gegebenenfalls bieten Plugins wie LearnDash so etwas beiläufig mit an.

      1. Okay, super.

        Ich habe es übers Handy und am PC verscuht aber meine angegebenen Namen und adressen werde nicht angezeigt ?

        1. Was steht denn in den Spalten drin? Das ist das, was das Skript von H5P geliefert bekommt, und H5P bekommt das von WordPress als Informationen zum angemeldeten Nutzer bekommt. Das Skript schreibt das nur weg.

          1. Wie kann ich am besten ein screenshot schicken ?
            Dann würde ich das machen

        1. Dann ist der betreffende Nutzer nicht in WordPress angemeldet, und darum bekommt der eine zufällige ID zugewiesen.

          1. In den Fragen wird ja auch nach email und name gefragt, aber ich sehe die antworten nicht. Woran kann das liegen ?

        2. Ein Screenshot bringt mir auch nicht mehr Information als die Angabe, was in der Spalte drinsteht.

          Das Plugin kann nur Daten aufsammeln, die es von H5P bzw. WordPress bekommt. Wenn der Nutzer/die Nutzerin in WordPress angemeldet ist, wenn er/sie die Aufgabe bearbeitet, steht da die E-Mail-Adresse dabei. Wenn nicht, dann nicht. Dann musst du dir die über die WordPress-User-ID, die auch gelistet wird, selbst aus der Datenbank holen. Der Quelltext ist frei verfügbar. und das Plugin hat auch einen Hook, um die Daten direkt in anderen Plugins abzugreifen und damit zu arbeiten.

          1. Wenn der Inhaltstyp die xAPI-Schnittstelle unterstützt, und wenn er ein “answered”-Statement gesendet hat (siehe Spalte “Verb Anzeige”), dann stehen die Antworten in der Spalte “Ergebnis Antwort”.

            Vieleicht noch einmal zum Klarstellen, steht ja auch in der Plugin-Beschreibung: Das Plugin ist dafür gedacht, um die xAPI-Statements abzugreifen und weiterzuverarbeiten. Es ist kein Gradebook-Ersatz. Und H5P ist eher nicht für Fragebögen da. Vielleicht solltest du dich ein wenig mit xAPI beschäftigen – oder das Plugin ist es einfach nicht das richtige Werkzeug für dich.

            Schonmal nach den üblichen Verdächtigen für so etwas Ausschau gehalten? GoogleForms? LimeSurvey? … Und auch für WordPress gibt es dafür sicher Plugins, die speziell dafür da sind.

          2. Entschuldigung das ich so viele Fragen stelle muss, aber es wäre sehr hilfreich wenn es klappt.

            Also müsste man in WordPress angemeldet sein.

            Abgesehen davon sind die Restlichen spalten auch leer, also die wo es explizit nach Name, email oder Beantwortung der Fragen geht. Die habe ich jetzt ein paar mal testweise mit anderen emailadressen und namen ausgefüllt.

  11. “Also müsste man in WordPress angemeldet sein.” Ja – habe ich nun schon mehrfach erwähnt 😛

    Es sind nie alle Spalten gefüllt. Das hängt davon ab, welches Verb für das xAPI-Statement genutzt wird – siehe Hinweis zu schauen, was xAPI überhaupt ist und wofür es da ist.

    Und ganz ehrlich: Es mag sein, dass du das unbedingt mit WordPress und H5P machen musst (ggf. professorale Vorgaben?), aber in meinen Augen ergibt es keinen Sinn (du scheinst das für Umfragen im Rahmen einer Bachelor-Arbeit zu brauchen), und ich bin auch kein kostenloser Help-Desk für IT-Probleme – Autor des Plugins hin oder her.

  12. Moin 🙂

    Erst mal vielen Dank für dieses hilfreiche Plugin!
    Bei vielen Inhaltstypen hat es sehr gut funktioniert.

    Nun ist allerdings folgendes Problem aufgetaucht:
    Bei dem Inhaltstyp “Essay” finde ich in der Spalte “Verb Anzeige” von allen TN, die den Typ bisher bearbeitet haben, nur “attempted”, aber nicht “answered”, so wie ich es zuvor immer gesehen hatte. Dadurch werden allerdings auch keine Texteingaben unter “Ergebnis Antwort” angezeigt, wordurch mir leider das wichtigste vorenthalten bleibt.

    Außerdem werden einige Bearbeitungen gar nicht erst mit aufgenommen (ich hatte es mehrmals mit einem Studi-Account ausprobiert, um der Autoren-Problematik auszuweichen) – oder dauert es erst immer ein wenig bis dies passiert?

    Am wichtigsten wäre für mich die Klärung des ersten Problems und ich würde mich sehr über eine Rückmeldung freuen. 🙂

    1. Kann ich (leider) nicht reproduzieren. Die xAPI-“answered-Statements gehen raus wie sie sollen, und ich bekomme sie hier auch angezeigt. (Screenshot)

      Was meinst du mit “Außerdem werden einige Bearbeitungen gar nicht erst mit aufgenommen”? Da dauert nix. Wenn du nicht als Admin angemeldet bist und im Frontend einen H5P-Inhalt anschaust, dann sollte das passen. Mehr Infos helfen mehr, vgl. (insbesondere Einblick in die Entwicklungskonsole oder die PHP-Fehlerlogdatei).

Leave a Reply

Your email address will not be published. Required fields are marked *