O WP Codex diz para fazer isso:
// You wish to make $my_var available to the template part at `content-part.php`
set_query_var( 'my_var', $my_var );
get_template_part( 'content', 'part' );
Mas como faço para echo $my_var
dentro da parte do modelo? get_query_var($my_var)
Nao funciona para mim.
Já vi várias recomendações de uso locate_template
. Esse é o melhor caminho a percorrer?
variables
get-template-part
Florian
fonte
fonte
set_query_var
eget_query_var
, no entanto, isso foi para usar os valores de uma$args
matriz que é passada para aWP_Query
. Pode ser útil para outras pessoas que estão começando a aprender isso.Respostas:
À medida que as postagens obtêm seus dados configurados via
the_post()
(respectivamente viasetup_postdata()
) e, portanto, são acessíveis pela API (get_the_ID()
por exemplo), vamos supor que estamos percorrendo um conjunto de usuários (comosetup_userdata()
preenche as variáveis globais do usuário conectado no momento e não é ' útil para esta tarefa) e tente exibir metadados por usuário:Em seguida, em nosso
wpse-theme/template-parts/user-contact_methods.php
arquivo, precisamos acessar o ID do usuário:É isso aí.
A explicação está exatamente acima da parte que você citou na sua pergunta:
A
extract()
função nativa do PHP "extrai" as variáveis (aglobal $wp_query->query_vars
propriedade) e coloca cada parte em sua própria variável, que tem exatamente o mesmo nome da chave. Em outras palavras:fonte
A
hm_get_template_part
função do humanmade é extremamente boa nisso e eu a uso o tempo todo.Você chama
e depois dentro do seu modelo, você usa
para retornar o valor. Faz cache e tudo, embora você possa removê-lo, se quiser.
Você pode até retornar o modelo renderizado como uma string, passando
'return' => true
para a matriz de chave / valor.fonte
Eu estava olhando em volta e encontrei uma variedade de respostas. Parece em um nível nativo, o Wordpress permite que variáveis sejam acessadas nas partes do modelo. Eu descobri que o uso do include acoplado ao local_template permitiu que o escopo das variáveis fosse acessível no arquivo.
fonte
include
não passará na verificação .Eu recomendo ler sobre a função PHP Extract ().
fonte
Encontrei esse mesmo problema em um projeto no qual estou trabalhando atualmente. Decidi criar meu próprio pequeno plug-in que permite transmitir variáveis de forma mais explícita para get_template_part usando uma nova função.
Caso você ache útil, aqui está a página no GitHub: https://github.com/JolekPress/Get-Template-Part-With-Variables
E aqui está um exemplo de como isso funcionaria:
fonte
Gosto do plug-in Pods e da função pods_view . Funciona de maneira semelhante à
hm_get_template_part
função mencionada na resposta do djb. Eu uso uma função adicional (findTemplate
no código abaixo) para procurar um arquivo de modelo no tema atual primeiro e, se não for encontrado, ele retorna o modelo com o mesmo nome na/templates
pasta do meu plugin . Esta é uma idéia aproximada de como estou usandopods_view
no meu plugin:pods_view
também suporta cache, mas não era necessário para meus propósitos. Mais informações sobre os argumentos da função podem ser encontradas nas páginas de documentação dos Pods. Consulte as páginas pods_view e cache parcial de páginas e peças de modelo inteligente com pods .fonte
Com base na resposta de @djb usando o código de humanmade.
Esta é uma versão leve de get_template_part que pode aceitar argumentos. Dessa forma, as variáveis têm escopo local para esse modelo. Não há necessidade de ter
global
,get_query_var
,set_query_var
.Por exemplo em
cart.php
:Em
apple.php
:fonte
Que tal agora?
Ao usar,
${$key}
você pode adicionar as variáveis ao escopo da função atual. Funciona para mim, rápido e fácil e não está vazando ou armazenado no escopo global.fonte
Para quem parece uma maneira muito fácil de passar variáveis, você pode alterar a função para incluir:
E então você poderá usar todas as variáveis definidas antes de incluir o modelo sem PASSAR adicionalmente cada uma para o modelo.
Os créditos vão para: https://mekshq.com/passing-variables-via-get_template_part-wordpress/
fonte
Esta é a solução exata e funcionou bem. https://developer.wordpress.org/reference/functions/set_query_var/
fonte