Estou tentando obter o valor de entrada de um código de acesso dentro de uma função usada por um filtro, mas parece não haver sucesso. Aqui está o que eu fiz:
function my_shortcode_function($atts){
$value = $atts['id'];
function filter_value(){
echo $value;
}
add_filter('posts_where','filter_value');
}
add_shortcode('my-shortcode','my_shortcode_function');
Agora eu sei que usar $value
dentro filter_value()
não funcionará por causa de escopos variáveis, mas mesmo usando $GLOBALS['value']
não funciona.
Eu até tentei usar $value = $atts['id']
dentro do, filter_value();
mas sem sucesso também.
Como posso usar o meu shortcode como [my-shortcode id='123']
e passar o valor 123 para o filtro?
Obrigado.
$GLOBALS['value'] = some value
e depois chamá-$GLOBALS['value']
lo, ele funciona, mas se eu definir o valor diretamente como$value = some value
e depois chamá-lo usando,$GLOBALS['value']
ele não funcionará, embora deva funcionar de acordo com o manual do PHP.$value
o escopo globalglobal $value;
antes de inicializá-lo com um valor. Por exemplo,global $value; $value = $a['id'];
no filtro, você pode fazerglobal $value; echo $value;
Isso ajuda?$GLOBALS['value'];
?global
palavra-chave é necessária. Em nossos exemplos, trabalhamos no escopo de funções, portanto aglobal
palavra-chave é necessária.Aqui estão algumas soluções alternativas:
Abordagem # 1
Você pode agrupar a definição do código de acesso e o
posts_where
retorno de chamada do filtro em uma classe para poder transmitir um determinado valor entre os métodos da classe, por exemplo, como uma variável privada .Abordagem # 2
Outra abordagem seria passar o valor como uma entrada para
WP_Query
o retorno de chamada do seu código curto:e, no filtro posts_where, você pode acessá-lo:
Abordagem # 3
... ou você também pode ajustar o exemplo por @the_dramatist para poder remover o retorno de chamada posteriormente, atribuindo a função anônima a uma variável:
Verifique, por exemplo, a documentação do PHP sobre como atribuir uma função anônima, com a palavra-chave use, a uma variável.
ps: Acho que aprendi sobre esse truque de atribuição de variáveis pelo @gmazzap, para facilitar a remoção de retorno de chamada de um filtro anônimo.
Espero que ajude!
fonte
WP_Query
direcionar uma determinada instância e acessá-la através de vários filtros comoposts_where
,pre_get_posts
eposts_clauses
. É o que fazemos na abordagem nº 2.Você pode usar a
use
palavra - chave PHP . Portanto, com a ajuda dessause
palavra - chave, você pode trazer variáveis para dentro de uma função. E também você pode escrever uma função anônima para reduzir o código. Então a coisa toda será-Espero que ajude.
fonte
Por que não passar o valor $ como um parâmetro?
documentação
fonte