El WP Codex dice hacer esto:
// 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' );
Pero, ¿cómo hago echo $my_var
dentro de la parte de la plantilla? get_query_var($my_var)
no funciona para mi
He visto toneladas de recomendaciones para usar en su locate_template
lugar. ¿Es esa la mejor manera de ir?
variables
get-template-part
Florian
fuente
fuente
set_query_var
yget_query_var
, sin embargo, esto era para el uso de los valores de una$args
matriz que se pasa a unaWP_Query
. Puede ser útil para otras personas que comienzan a aprender esto.Respuestas:
A medida que las publicaciones configuran sus datos a través de
the_post()
(respectivamente a través desetup_postdata()
) y, por lo tanto, son accesibles a través de la API (get_the_ID()
por ejemplo), supongamos que estamos recorriendo un conjunto de usuarios (ya quesetup_userdata()
llena las variables globales del usuario actualmente conectado y no está ' t útil para esta tarea) e intente mostrar metadatos por usuario:Luego, en nuestro
wpse-theme/template-parts/user-contact_methods.php
archivo, necesitamos acceder a la ID de usuario:Eso es.
La explicación en realidad está exactamente por encima de la parte que citó en su pregunta:
La
extract()
función nativa de PHP "extrae" las variables (laglobal $wp_query->query_vars
propiedad) y pone cada parte en su propia variable que tiene exactamente el mismo nombre que la clave. En otras palabras:fuente
La
hm_get_template_part
función de humanmade es extremadamente buena en esto y la uso todo el tiempo.Llama
y luego dentro de tu plantilla, usas
para devolver el valor. Realiza el almacenamiento en caché y todo, aunque puede eliminarlo si lo desea.
Incluso puede devolver la plantilla representada como una cadena pasando
'return' => true
a la matriz de clave / valor.fuente
Estaba mirando alrededor y he encontrado una variedad de respuestas. Parece a nivel nativo, Wordpress permite acceder a las variables en las partes de la Plantilla. Encontré que el uso de include junto con Locate_template permitió que el alcance de las variables fuera accesible en el archivo.
fuente
include
no pasará la comprobación de tema .Recomiendo leer sobre la función PHP Extract ().
fuente
Me encontré con este mismo problema en un proyecto en el que estoy trabajando actualmente. Decidí crear mi propio pequeño complemento que le permite pasar más explícitamente variables a get_template_part mediante el uso de una nueva función.
En caso de que le resulte útil, aquí está la página en GitHub: https://github.com/JolekPress/Get-Template-Part-With-Variables
Y aquí hay un ejemplo de cómo funcionaría:
fuente
Me gusta el complemento Pods y su función pods_view . Funciona de manera similar a la
hm_get_template_part
función mencionada en la respuesta de djb. Utilizo una función adicional (findTemplate
en el código a continuación) para buscar primero un archivo de plantilla en el tema actual, y si no lo encuentra, devuelve la plantilla con el mismo nombre en la/templates
carpeta de mi complemento . Esta es una idea aproximada de cómo estoy usandopods_view
mi plugin:pods_view
También es compatible con el almacenamiento en caché, pero no lo necesitaba para mis propósitos. Puede encontrar más información sobre los argumentos de la función en las páginas de documentación de Pods. Consulte las páginas para pods_view y Almacenamiento parcial de páginas y partes de plantillas inteligentes con pods .fuente
Basado en la respuesta de @djb usando el código de humanmade.
Esta es una versión ligera de get_template_part que puede aceptar argumentos. De esta forma, las variables se definen localmente para esa plantilla. No hay necesidad de tener
global
,get_query_var
,set_query_var
.Por ejemplo en
cart.php
:En
apple.php
:fuente
¿Qué tal esto?
Mediante el uso
${$key}
puede agregar las variables en el alcance de la función actual. Funciona para mí, rápido y fácil y no tiene fugas ni está almacenado en el alcance global.fuente
Para aquellos que buscan una manera muy fácil de pasar variables, puede cambiar la función para incluir:
Y luego podrá usar todas las variables que se definen antes de incluir la plantilla sin PASAR adicionalmente cada una para la plantilla.
Los créditos van a: https://mekshq.com/passing-variables-via-get_template_part-wordpress/
fuente
Esta es la solución exacta y funcionó bien. https://developer.wordpress.org/reference/functions/set_query_var/
fuente