Você tem pelo menos duas opções:
- Globalize a variável desejada e, em seguida, faça referência a ela dentro do retorno de chamada
- Envolva a lógica de cálculo de pontuação com uma função e, em seguida, faça referência a ela dentro do retorno de chamada
Globalize a variável
<?php
global $score;
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
global $score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
?>
Enrole o cálculo da pontuação
Se você só precisar do cálculo de pontuação dentro do filtro, puxe a lógica para o próprio retorno de chamada:
<?php
function add_score_to_title($title) {
$score = 0;
$questions = get_quiz_result_questions();
$total_questions = 0;
foreach( $questions as $question ) {
$order = $question->order;
if( $order >= 100 ) {
break;
}
if( $question->correct == $_POST['Q'][$order] ) {
$score++;
}
$total_questions++;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
?>
Melhor ainda, você poderia incluir seu cálculo de pontuação em uma função própria e, em seguida, chamar essa função dentro de seu retorno de chamada:
<?php
function wpse48677_get_score() {
$score = 0;
$questions = get_quiz_result_questions();
$total_questions = 0;
foreach( $questions as $question ) {
$order = $question->order;
if( $order >= 100 ) {
break;
}
if( $question->correct == $_POST['Q'][$order] ) {
$score++;
}
$total_questions++;
$output['score'] = $score;
$output['total_questions'] = $total_questions;
return $output;
}
function add_score_to_title($title) {
$score_results = wpse48677_get_score();
$score = $score_results['score'];
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
?>
Se você encontrar problemas ao fazer referência ao objeto $_POST
, também poderá registrar sua variável de consulta e usar get_query_var()
internamente para obter dados:
function add_score_query_vars( $query_vars ) {
$query_vars[] = 'Q';
return $query_vars;
}
add_filter( 'query_vars', 'add_score_query_vars' );
Com isso, $_POST['Q']
pode ser substituído por get_query_var('Q')
.