Si bien normalmente he usado include
o require
solo para guardar el mantenimiento de código a largo plazo, he comenzado a usarlo get_template_part
y, locate_template
como usar cosas integradas de WordPress, siempre es lo mejor.
Mi pregunta es: ¿se supone que puedes pasar las variables a los resultados de cualquiera get_template_part
o locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
En el código anterior $var
, se imprimiría dentro de la plantilla personalizada, pero la variable no parece funcionar. ¿Me estoy perdiendo algo o es este comportamiento esperado?
Descubrí que no pasan en la instancia anterior o cuando se utiliza location_template
<?php
locate_template( 'custom-template-part.php', true );
?>
fuente
locate_template()
hecho , la inclusión, si el parámetro se establece comotrue
-como en la pregunta. (el valor predeterminado esfalse
, así que no pegue la versión de las preguntas en la respuesta aceptada). También puede usarset_query_var('var', $var);
y usar suget_template_part()
normal. Entonces también tiene las variables predeterminadas Worpdress accesibles dentro del archivo de plantilla, como se menciona en @MathSmath.Una solución ordenada encontrada en el códice
Entonces, si está pasando por publicaciones personalizadas, puede hacer esto:
Y en esa plantilla, obtendrás automáticamente un
$my_post
.fuente
wc_get_template_part
en WooCommerce, que sin duda extiende el WP predeterminado.También tuve problemas con esto (al intentar obtener una consulta personalizada para trabajar con una parte de plantilla). La respuesta corta es: no, la parte de la plantilla no hereda automáticamente las variables personalizadas como lo hace una inclusión regular.
Tanto get_template_part () como localizar_template () eventualmente usan la función load_template () para cargar realmente el archivo (usando un require). Esta función globaliza los siguientes vars:
$ posts, $ post, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ comment, $ user_ID
Sin embargo, no parece haber otros vars disponibles desde el interior de la parte de la plantilla. Supongo que dado que el requisito real está envuelto en una función, ¿cambia el alcance o algo así?
De todos modos, trataría de globalizar cualquier variable adicional que necesite pasar, luego llamar a esos globales de su parte de plantilla.
fuente
Solo mis dos centavos para futuras referencias, una solución alternativa al menos en Wordpress 3.5 es agregar la variable
$wp_query->query_vars
.Necesitaba mi parte global
_vk_errors
dentro de una plantilla y solo lo hice$wp_query->query_vars['_vk_errors'] = $_vk_errors;
antes de llamarget_template_part()
.fuente
Existe mi función simple para resolver problemas variables. Está haciendo lo mismo que Wordpress hace en
get_template_part()
función. Simplemente copie y pegue enfunction.php
Ejemplo de uso en plantilla
En la
content-heighlight.php
variable es accesible con nombre$utm_source
y valorfooter
fuente
Simplemente puede ajustar get_template_part, almacenar un objeto modelo en una variable global y borrarlo más tarde. Así es como nos ha ido en nuestros proyectos:
funciones.php
Uso en la plantilla principal:
Accediendo al modelo provisto en la parte de plantilla:
De esta manera, no tiene que copiar y pegar la función get_template_part original en su propia función en caso de que su implementación pueda cambiar más tarde por los desarrolladores de WP.
fuente