“Scopri il tuo profilo” con Quiz and Survey Master

Il plugin WordPress Quiz and Survey Master (QSM), altrimenti detto “Quiz Master Next (QMN)”, permette di creare e pubblicare online un’ampia scelta di questionari. Nativamente non permette, però, di creare questionari del tipo “Scopri il tuo profilo” (ad esempio una banca potrebbe predisporre un questionario per determinare il profilo di rischio di un investitore). Questa […]
immagine dell'autore dell'articolo

Scritto da: Alberto

Una vita nell'informatica, per lavoro e per passione.
agsdix-far fa-calendar-alt
Data pubblicazione: 27 Agosto 2021
Categorie: Plug-in
agsdix-far fa-comments

Il plugin WordPress Quiz and Survey Master (QSM), altrimenti detto “Quiz Master Next (QMN)”, permette di creare e pubblicare online un’ampia scelta di questionari.

Nativamente non permette, però, di creare questionari del tipo “Scopri il tuo profilo” (ad esempio una banca potrebbe predisporre un questionario per determinare il profilo di rischio di un investitore).

Questa tipologia di questionari presenta all’utente delle domande con risposta multipla, dove ciascuna risposta è associata ad un particolare profilo. Quando l’utente completa il questionario, gli viene attribuito il profilo che ha totalizzato il maggior numero di risposte.

Vediamo di seguito un esempio su come utilizzare QSM per determinare a quale dei profili A, B, C e D appartiene un utente.

  • Creare una Question Category (ad esempio la categoria ABCD)
  • Creare il questionario con queste opzioni:
    • Quiz Type: “Quiz”
    • Grading System: “Points”
  • Associare ciascuna domanda del questionario alla categoria ABCD.
  • Associare a ciascuna risposta un punteggio, in modo che il punteggio finale ottenuto dall’utente contenga in realtà il numero di risposte date a ciascun profilo. Se si prevedono fino a 99 domande, i punteggi da attribuire alle risposte potrebbero essere:
    • risposte del profilo A: punteggio 1.000.000
    • risposte del profilo B: punteggio 10.000
    • risposte del profilo C: punteggio 100
    • risposte del profilo D: punteggio 1
  • Così facendo, se l’utente fornisce 3 risposte “A”, 5 risposte “B”, 1 risposta “C” e 1 risposta “D”, il punteggio finale sarà 3050101:
L'esito del questionario corrisponde al numero di riposte date per ciascun profilo
L’esito del questionario corrisponde al numero di riposte date per ciascun profilo

A questo punto si deve scrivere l’algoritmo che permetta di passare dall’esito del questionario al profilo da attribuire all’utente (nell’esempio sarà il profilo “B”, che ha ottenuto 5 risposte su 10). L’algoritmo andrà inserito come hook di filtro nel file functions.php del tema child del sito.

Innanzitutto si deve decidere come gestire i punteggi a pari merito:

  • se i profili hanno una priorità, nel caso di pareggio sarà selezionato il profilo con maggior priorità,
  • n caso contrario, la risposta da dare all’utente dovrà indicare non uno, ma più profili.

Vediamo questo secondo caso, che risulta più complesso.

  • Si deve determinare il massimo numero di profili che possono scaturire dal questionario e predisporre una tabella delle combinazioni. Ammettiamo che si vogliano al massimo tre profili ex aequo, si avranno 14 combinazioni:
  1 = prevalenza di A, B, C
  2 = prevalenza di A, B, D
  3 = prevalenza di A, C, D
  4 = prevalenza di B, C, D
  5 = prevalenza di A, B
  6 = prevalenza di A, C
  7 = prevalenza di A, D
  8 = prevalenza di B, C
  9 = prevalenza di B, D
 10 = prevalenza di C, D
 11 = prevalenza di A
 12 = prevalenza di B
 13 = prevalenza di C
 14 = prevalenza di D
  • Si deve poi individuare l’hook del plugin idoneo a contenere l’algoritmo. Va utilizzato il filtro “mlw_qmn_template_variable_results_page“, che viene richiamato nella classe \quiz-master-next\php\classes\class-qsm-results-pages.php (cliccare sul link per maggiori dettagli).
  • Ed ecco la funzione con un possibile algoritmo per determinare il profilo (o i profili) risultanti, partendo dall’esito del questionario:
add_filter('mlw_qmn_template_variable_results_page', 'my_qmn_filter', 10, 2);

function my_qmn_filter($content, $qmn_quiz_array) {
    /*il massimo valore atteso è 99000000 (8 digit)*/
    if ($content !="" and strlen($content) < 9 ) {
        $operating = $content;
        $a = intval($operating / 1000000);
        $operating = $operating - $a * 1000000;
        $b = intval($operating / 10000);
        $operating = $operating - $b * 10000;
        $c = intval($operating / 100);
        $operating = $operating - $c * 100;
        $d = $operating ;
        $max = max($a, $b, $c, $d);
        if ($max === $a and $max === $b AND $max === $c) {
            return 1;
        } elseif ($max === $a and $max === $b AND $max === $d) {
            return 2;
        } elseif ($max === $a and $max === $c AND $max === $d) {
            return 3;
        } elseif ($max === $b and $max === $c AND $max === $d) {
            return 4;
        } elseif ($max === $a and $max === $b) {
            return 5;
        } elseif ($max === $a and $max === $c) {
            return 6;
        } elseif ($max === $a and $max === $d) {
            return 7;
        } elseif ($max === $b and $max === $c) {
            return 8;
        } elseif ($max === $b and $max === $d) {
            return 9;
        } elseif ($max === $c and $max === $d) {
            return 10;
        } elseif ($max === $a) {
            return 11;
        } elseif ($max === $b) {
            return 12;
        } elseif ($max === $c) {
            return 13;
        } elseif ($max === $d) {
            return 14;
        } else {
            return 0;
        }
    } else {
        return $content;
    }
}

Come accennato in precedenza, il codice dev’essere inserito nel file functions.php del tema child.

Come ultima operazione, si deve predisporre la pagina di risultato per ciascuno dei 14 possibili esiti del questionario;

  • nelle condizioni (riquadro “When…”), indicare:
    • nel primo campo, la Question Category creata all’inizio e a cui sono state associate le domande del questionario (“ABCD” nell’esempio);
    • nel secondo campo il valore “Total points earned”;
    • nel terzo campo il valore “is equal to”
    • nell’ultimo campo uno dei 14 valori restituiti dall’algoritmo
  • nel riquadro “…Show” indicare il testo relativo al profilo o ai profili corrispondenti al valore indicato nel precedente campo.
Plugin QSM - Impostazione delle pagine di risultato
Plugin QSM – Impostazione delle pagine di risultato

In questo modo verrà visualizzata la pagina di risultato corrispondente al valore restituito all’algoritmo.

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *