Embora eu normalmente tenha usado include
ou require
por conta própria para salvar a manutenção de código a longo prazo, comecei a usá-lo get_template_part
e, locate_template
como sempre, é melhor usar o material incorporado do WordPress.
Minha pergunta é: você deve passar variáveis pelos resultados de um get_template_part
ou de outro locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
No código acima, $var
seria impresso dentro do modelo personalizado, mas a variável não parece funcionar. Estou faltando alguma coisa ou esse comportamento é esperado?
Descobri que eles não passam na instância acima ou ao usar o find_template
<?php
locate_template( 'custom-template-part.php', true );
?>
fonte
locate_template()
infact inclui a inclusão, se o parâmetro estiver definido comotrue
-as na pergunta. (o padrão éfalse
, portanto, não cole a versão das perguntas na resposta aceita.) Você também pode usarset_query_var('var', $var);
e usar o seuget_template_part()
normalmente. Então você também tem as variáveis padrão do Worpdress acessíveis no arquivo de modelo, como o @MathSmath mencionado.Uma solução pura encontrada no codex
Portanto, se você estiver percorrendo postagens personalizadas, poderá fazer o seguinte:
E nesse modelo em si, você receberá automaticamente um
$my_post
.fonte
wc_get_template_part
no WooCommerce, que sem dúvida estende o WP padrão.Também tive problemas com isso (ao tentar obter uma consulta personalizada para trabalhar com uma parte do modelo). A resposta curta é: não, a parte do modelo não herda automaticamente vars personalizados, como faz uma inclusão regular.
Tanto o get_template_part () quanto o find_template () eventualmente usam a função load_template () para realmente carregar o arquivo (usando uma exigência). Essa função globaliza os seguintes vars:
$ posts, $ post, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ comment, $ user_ID
No entanto, nenhum outro vars parece estar disponível dentro da parte do modelo. Eu acho que desde que o requisito real está envolvido em uma função, o escopo muda ou algo assim?
De qualquer forma, eu tentaria globalizar todos os vars adicionais que você precisa passar e depois chamar os globais da parte do seu modelo.
fonte
Apenas meus dois centavos para referências futuras, uma solução alternativa pelo menos no Wordpress 3.5 é adicionar a variável
$wp_query->query_vars
.Eu precisava do meu global
_vk_errors
dentro de uma parte do modelo e o fiz$wp_query->query_vars['_vk_errors'] = $_vk_errors;
antes de ligarget_template_part()
.fonte
Existe a minha função simples de resolver problemas variáveis. Está fazendo a mesma coisa que o Wordpress faz em
get_template_part()
função. Basta copiar e colar parafunction.php
Exemplo de uso no modelo
Na
content-heighlight.php
variável is acessível com nome$utm_source
e valorfooter
fonte
Você pode simplesmente agrupar o get_template_part, armazenar um objeto de modelo em uma var global e limpá-lo mais tarde. Aqui está como estamos nos saindo em nossos projetos:
functions.php
Uso no modelo principal:
Acessando o modelo fornecido na parte do modelo:
Dessa forma, você não precisa copiar e colar a função get_template_part original em sua própria função, caso sua implementação possa mudar posteriormente pelos desenvolvedores do WP.
fonte