Saltar al contenido

Variable de paso get_template_part de WordPress

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *