apply_filters( 'learndash_quiz_check_answer', boolean $check_answer, string $question_type, string $answer, array $correct_answers, int $answer_index, WpProQuiz_Model_Question $question_model )
Filters whether to check the answer of close type question.
Description #
Parameters #
- $check_answer
-
(boolean) Whether to check the answer.
- $question_type
-
(string) Type of the question.
- $answer
-
(string) The answer given by user for the question.
- $correct_answers
-
(array) An array of correct answers for the question.
- $answer_index
-
(int) Answer index.
- $question_model
-
(WpProQuiz_Model_Question) Question model object.
Source #
Examples #
Note: Extended code example below not guaranteed, you may need to consult with a developer
<?php
/**
* Example usage for learndash_quiz_check_answer filter.
*/
add_filter(
'learndash_quiz_check_answer',
function ( $correct = false, $question_type = 'cloze_answer', $user_response = null, $correctData = null, $answerIndex = 0, $questionModel = null ) {
// v2.5 added
if ( $question_type == 'cloze_answer' ) {
// Check if this is from a specific quiz ID
if ( $questionModel->getQuizId() == 2 ) {
// Check if this is from a specific question ID
if ( $questionModel->getId() == 4 ) {
// perform some logic to compare the $user_response to the array of $correctData items
// As an example we are gettng the real answer data again from the quiz and perform out own compare logic.
$answer_data = $questionModel->getAnswerData();
if ( isset( $answer_data[0] ) ) {
$q_answer_text = $answer_data[0]->getAnswer();
if ( ! empty( $q_answer_text ) ) {
// What will be returned in the $q_answers is an array of possible answers in the 'correct' node for this question element.
// So if the answer string is '{[play][love][hate]}' then $q_answers[correct] will be an array with these values.
// The 'false' argument to the function learndash_question_cloze_fetch_data prevents converting the answer texts to lowercase.
$q_answers = learndash_question_cloze_fetch_data( $q_answer_text, false );
if ( ( isset( $q_answers['correct'][ $answerIndex ] ) ) && ( ! empty( $q_answers['correct'][ $answerIndex ] ) ) ) {
if ( ! in_array( $user_response, $q_answers['correct'][ $answerIndex ] ) ) {
$correct = false;
}
}
}
}
}
}
}
// Always return $correct;
return $correct;
},
10,
6
);