Acho que preciso passar dados personalizados para um filtro fornecido por um plug-in de terceiros. Todas as maneiras pelas quais eu vi isso são realmente complicadas e difíceis de entender.
Veja este exemplo:
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Como posso passar a $score
variável add_score_to_title()
?
O que acabei fazendo foi adicionar minha variável ao $wp
objeto global . Então você acaba com isso:
global $wp;
$score = 42; //Some crazy calculation I don't want to repeat.
$wp->some_random_name_for_score = $score;
function add_score_to_title($title) {
global $wp;
$score = $wp->some_random_name_for_score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Sujo? Talvez. Simples? Sim! Alguma desvantagem dessa técnica? Por favor, discuta.
ATUALIZAÇÃO Aqui está o código completo em questão -> http://pastebin.com/fkSXY04m
$score
é calculado fazendo um loop sobre uma matriz de coisas e incrementando uma variável. pastebin.com/fkSXY04mRespostas:
Você tem pelo menos duas opções:
Globalize a variável
Finalizar o cálculo da pontuação
Se você precisar apenas do cálculo de pontuação dentro do filtro, insira a lógica no próprio retorno de chamada:
Melhor ainda, você pode agrupar seu cálculo de pontuação em uma função própria e depois chamar essa função dentro de seu retorno de chamada:
Se você encontrar problemas para referenciar o
$_POST
objeto, também poderá registrar sua variável de consulta e usarget_query_var()
internamente para obter dados:Com isso no lugar,
$_POST['Q']
pode ser substituído porget_query_var('Q')
.fonte
$score
primeiro e depois globalizei. Não é à toa que não estava funcionando. Obrigado!Chame a função em qualquer lugar do seu script para obter a pontuação, ela será calculada apenas uma vez.
Outra maneira, usando funções anônimas :
fonte
add_filter()
ouadd_action()
chamadas. Eles não podem ser removidos viaremove_function()
.remove_filter()
eremove_action()
. E não há nenhuma razão que os filtros Plugin / temáticos não devem razoavelmente ser capaz de ser removido: override Plugin enfileira folha de estilo, Temas de crianças, etc.O exemplo a seguir vê a variável
$my_calculation
no escopo global, no entanto, de dentro da nossa função local, precisamos declararglobal $my_calculation
para acessar a variável no escopo global.Esta é apenas uma maneira de fazê-lo e parece estar limpo. Isso funcionaria para você?
fonte
print
ouecho
seu resultado para garantir que sua função esteja realmente funcionando antes de passá-la para o filtro?$score
realmente funciona. Eu brinquei e comecei a$score
globalizar, o que claramente não funciona. Fazer da maneira correta, globalizando$score
primeiro e depois atribuindo um valor, funciona conforme o esperado. Obrigado a todos.