Verificamos de forma completamente cada noticia en nuestro espacio con la meta de enseñarte en todo momento información más veraz y actual.
Solución:
Usando WordPress 5.5+
A partir de WordPress 5.5, pasar variables a través de get_template_part es parte del núcleo.
A partir de WordPress 5.5, las funciones de carga de la plantilla ahora permitirán que se pasen argumentos adicionales al archivo de la plantilla coincidente utilizando un nuevo parámetro $ args.
get_template_part( string $slug, string $name = null, array $args = null )
Ejemplo:
'featured-home',
'data' => array(
'size' => 'large',
'is-active' => true,
))
);
?>
y luego en el archivo incluido (es decir, plantillas-partes / imagen destacada), puede simplemente mostrar las variables (como en el ejemplo anterior):
if ( $args['class'] )
echo $args['class'];
o
echo $args['data']['size'];
alternativamente, configure los valores predeterminados primero, usando wp_parse_args:
// Setup defaults
$array_defaults = array(
'class' => 'featured',
'data' => array(
'size' => 'medium',
'is-active' => false,
)
);
$args = wp_parse_args( $args, $array_defaults );
Para ser compatible con versiones anteriores en su tema, probablemente también debería verificar la versión actual de WordPress.
Usando set_query_vars
La respuesta original a estas preguntas fue utilizar set_query_var
En tu tema:
En la parte de la plantilla:
El núcleo get_template_part()
La función no admite el paso de variables. Solo acepta dos parámetros, slug y name. Si bien no existe una solución incorporada para este problema, el mejor enfoque es crear una función que imite de cerca get_template_part()
para manejarlo.
Normalmente, crearía una función que solo toma el nombre del archivo de plantilla y las variables que quiero pasar como un array. Sin embargo, en su ejemplo, está usando ambos argumentos para get_template_part()
ya lo que significa que necesitará una función un poco más compleja. Voy a publicar ambas versiones a continuación.
Versión simplificada: nombre (slug) y datos
function wpse_get_partial($template_name, $data = [])
$template = locate_template($template_name . '.php', false);
if (!$template)
return;
if ($data)
extract($data);
include($template);
Ejemplo de uso: wpse_get_partial('header-promotion', ['message' => 'Example message']);
Esto cargaría un archivo llamado header-promotion.php
con $message
disponible en su interior. Dado que el segundo parámetro es un array, puede pasar tantas variables como necesite.
Copia de get_template_part – agregando un tercer parámetro
Si no necesitas ambos $slug
y $name
cuando usted llama get_template_part()
, probablemente desee la versión simplificada. Para aquellos que sí lo hacen, esta es la opción más compleja.
function wpse_get_template_part($slug, $name = null, $data = [])
// here we're copying more of what get_template_part is doing.
$templates = [];
$name = (string) $name;
if ('' !== $name)
$templates[] = "$slug-$name.php";
$templates[] = "$slug.php";
$template = locate_template($templates, false);
if (!$template)
return;
if ($data)
extract($data);
include($template);
Ejemplo de uso: wpse_get_template_part('header-promotion', 'top', [$message => 'Example message']);
Ninguna función es una copia perfecta de get_template_part()
. Me salteé todos los filtros adicionales que usa la función principal en aras de la simplicidad.
¿Qué pasa con las variables globales o las variables de consulta?
- Los globales son bastante comunes en WordPress, pero generalmente es mejor evitarlos. Funcionarán, pero comenzarán a complicarse cuando use la misma parte de la plantilla más de una vez en una sola página.
- Consultar vars (
get_query_var()
/set_query_var()
) no están hechos para ese propósito. Es una solución hacky que puede introducir efectos secundarios no deseados.
No, no puedes pasar variables a get_template_part()
. En su lugar, puede utilizar locate_template()
y PHP nativos include()
función. Puede leer más aquí: https://mekshq.com/passing-variables-via-get_template_part-wordpress/.
Sección de Reseñas y Valoraciones
Si sostienes algún recelo o capacidad de progresar nuestro noticia eres capaz de ejecutar una interpretación y con placer lo observaremos.