Tutorial WordPress: Cómo alinear logos de partners en una rejilla responsive

·

·

Introducción

Este tutorial explica con todo lujo de detalles cómo alinear logos de partners en una rejilla responsive para WordPress. Incluye alternativas (CSS Grid, Flexbox), prácticas recomendadas para imágenes (retina, srcset, lazy loading), ejemplos de PHP para obtener logos desde un Custom Post Type o un shortcode, y consideraciones de accesibilidad y rendimiento. Todos los ejemplos de código están incluidos en bloques listos para copiar.

Requisitos previos

Concepto general y estructura HTML recomendada

La estructura que recomiendo es una lista semántica (ul > li) donde cada item contiene la imagen del logo y, opcionalmente, un enlace al partner. La lista es ideal para accesibilidad porque representa una colección de elementos relacionados.

Ejemplo de estructura (marcada como ejemplo en el bloque de código):

ltul class=partners-gridgt
  ltli class=partner-itemgt
    lta href=https://partner.example title=Partner Agt
      ltimg src=logo-partner-a.png alt=Logo Partner Agt
    lt/agt
  lt/ligt
  ltli class=partner-itemgt
    ltimg src=logo-partner-b.png alt=Logo Partner Bgt
  lt/ligt
  lt!-- más items --gt
lt/ulgt

Enfoque CSS — Opciones para una rejilla responsive

Dos aproximaciones sólidas: CSS Grid (la más potente para rejillas) o Flexbox (sencilla y compatible). Ambas mantienen los logos centrados, con tamaño uniforme y respetando la relación de aspecto.

1) CSS Grid — auto-fit / minmax (recomendado)

Ventajas: control sencillo de columnas, gaps consistentes, buena respuesta a distintos anchos.

/ Variables para ajustar rápidamente /
:root{
  --partner-min: 120px / ancho mínimo del logo /
  --partner-gap: 20px
}

/ Contenedor de la rejilla /
.partners-grid{
  display: grid
  grid-template-columns: repeat(auto-fit, minmax(var(--partner-min), 1fr))
  gap: var(--partner-gap)
  align-items: center
  list-style: none
  margin: 0
  padding: 0
}

/ Cada celda /
.partner-item{
  display: flex
  align-items: center
  justify-content: center
  padding: 12px / espacio alrededor de cada logo /
  background: transparent / o color si lo deseas /
}

/ Asegurar que la imagen se adapte sin recortarse /
.partner-item img{
  max-width: 100%
  max-height: 60px / controla la altura visual de todos los logos /
  width: auto
  height: auto
  object-fit: contain / mantiene proporciones dentro del contenedor /
  display: block
  margin: 0 auto
  transition: transform .25s ease, filter .25s ease
}

/ Opcional: efecto hover /
.partner-item a:hover img,
.partner-item:hover img{
  transform: scale(1.03)
  filter: none
}

/ Ajustes para pantallas muy pequeñas /
@media (max-width: 480px){
  :root{ --partner-min: 90px --partner-gap: 12px }
  .partner-item img{ max-height: 48px }
}

2) Flexbox — alternativa simple

.partners-grid{
  display: flex
  flex-wrap: wrap
  gap: 20px
  align-items: center
  justify-content: center
  padding: 0
  margin: 0
}

.partner-item{
  flex: 1 1 140px / crece, encoge y base mínima /
  display: flex
  align-items: center
  justify-content: center
  padding: 10px
  min-width: 100px
  max-width: 220px
}

.partner-item img{
  max-width: 100%
  max-height: 60px
  object-fit: contain
}

Controlar la altura y la apariencia uniforme

Para que todos los logos tengan una altura visual coherente, usar max-height en la imagen y object-fit: contain. Si quieres recuadros exactos (misma altura/anchura) puedes envolver la imagen en un contenedor con un aspect-ratio fijo o usar padding hacks.

/ Contenedor cuadrado para logos con fondo transparente centrado /
.partner-logo-box{
  width: 100%
  aspect-ratio: 3 / 1 / navegador moderno /
  display: flex
  align-items: center
  justify-content: center
  padding: 8px
}
.partner-logo-box img{ max-height: 100% max-width: 100% object-fit: contain }

Optimización de imágenes en WordPress (srcset, retina, lazy load)

Ejemplos prácticos en PHP para WordPress

1) Registrar un tamaño de imagen y encolar estilos

// functions.php (child theme)
add_action(after_setup_theme, function(){
  // tamaño personalizado para logos
  add_image_size(partner-logo, 400, 200, false) // no crop, mantener proporciones
})

add_action(wp_enqueue_scripts, function(){
  wp_enqueue_style(partners-styles, get_stylesheet_directory_uri() . /css/partners.css, array(), 1.0)
})

2) Bucle PHP: obtener logos de un Custom Post Type partner

Asumo que creaste un CPT llamado partner y que usas la imagen destacada para el logo. El siguiente código genera la lista semántica con clases esperadas por los estilos CSS anteriores.

// template o shortcode
query = new WP_Query(array(
  post_type => partner,
  posts_per_page => -1,
  orderby => menu_order,
  order => ASC,
))

if(query->have_posts()):
  echo ltul class=partners-gridgt
  while(query->have_posts()): query->the_post()
    link = get_post_meta(get_the_ID(), partner_url, true) // si tienes campo URL
    alt = get_the_title()
    echo ltli class=partner-itemgt
    if(link){
      echo lta href= . esc_url(link) .  title= . esc_attr(alt) . gt
      echo wp_get_attachment_image( get_post_thumbnail_id(), partner-logo, false, array(alt => esc_attr(alt)) )
      echo lt/agt
    } else {
      echo wp_get_attachment_image( get_post_thumbnail_id(), partner-logo, false, array(alt => esc_attr(alt)) )
    }
    echo lt/ligt
  endwhile
  echo lt/ulgt
  wp_reset_postdata()
endif

3) Shortcode configurable (opcional)

Shortcode para insertar la rejilla en cualquier página y cambiar número de columnas vía atributo CSS personalizado.

// functions.php
function partners_grid_shortcode(atts){
  atts = shortcode_atts(array(
    min => 120px,
    gap => 20px
  ), atts, partners_grid)

  // inyecta variable CSS inline (podrías mejor manejarlo mediante clases)
  style = sprintf(, esc_attr(atts[min]), esc_attr(atts[gap]))

  // Reutiliza el bucle anterior (simplificado)
  ob_start()
  echo style
  // ... (aquí incluirías el mismo bucle WP_Query mostrado arriba)
  // Por brevedad, se asume que hay una función que imprime la lista: print_partners_list()
  print_partners_list()
  return ob_get_clean()
}
add_shortcode(partners_grid, partners_grid_shortcode)

Accesibilidad y SEO

Rendimiento y mejores prácticas

  1. Genera tamaños de imagen adecuados con add_image_size y usa las funciones de WP para output (wp_get_attachment_image).
  2. Habilita lazy-loading (WordPress ya lo añade a muchas imágenes) y usa formatos modernos (WebP).
  3. Evita cargar logos excesivamente grandes usar 2x assets para retina si no confías en srcset automático.
  4. Minimiza animaciones y evita sombras/gradientes pesados que afecten paint cost en mobile.

Animaciones y efectos opcionales

Animaciones ligeras (transform: scale, transition) aportan dinamismo sin penalizar mucho el rendimiento. Evitar animaciones que cambien layout o provoquen repaints masivos.

.partner-item img{
  transition: transform .25s cubic-bezier(.2,.8,.2,1), filter .25s
  filter: grayscale(.25)
}
.partner-item:hover img{ transform: translateY(-3px) scale(1.03) filter: grayscale(0) }

Comprobaciones y depuración

Ejemplo final completo

Combina lo mostrado: registra tamaño, añade CSS grid y un bucle que use wp_get_attachment_image para sacar srcset y loading automático. Este es el patrón que recomiendo en la mayoría de proyectos WordPress.

Resumen práctico

Notas finales

Aplicando estas técnicas lograrás una rejilla de logos de partners que se adapta a pantallas, mantiene proporciones y carga de forma eficiente. Usa los fragmentos de código provistos como punto de partida y adapta estilos y tamaños a tu diseño específico.



Leave a Reply

Your email address will not be published. Required fields are marked *