Tutorial WordPress: Cómo destacar el primer resultado de búsqueda con una tarjeta CSS

·

·

Introducción

Este tutorial explica, paso a paso y con ejemplos prácticos, cómo destacar el primer resultado de búsqueda en WordPress usando una tarjeta CSS. Verás varias aproximaciones: modificación del loop de búsqueda (PHP), uso de un filtro en functions.php, y una alternativa 100% CSS cuando la estructura del tema lo permite (por ejemplo, ul/li o bloques del editor). También incluimos estilos CSS detallados para la tarjeta destacada, consideraciones de accesibilidad y recomendaciones de rendimiento.

Requisitos previos

Resumen de la idea

La idea es identificar el primer elemento del loop de búsqueda y añadirle una clase específica (por ejemplo, first-result). Esa clase permitirá aplicar estilos CSS distintos que conviertan ese primer resultado en una tarjeta visualmente destacada: mayor imagen, fondo, sombras, y más espacio para contenido.

Método 1 — Modificar el loop de búsqueda (search.php o template part)

Edite el archivo search.php o el template part que genera cada resultado (por ejemplo content-search.php). Añada un contador y condicione la clase en función del índice. Ejemplo mínimo de loop:

lt?php
// Dentro de search.php o del template part
search_index = 0
if ( have_posts() ) :
    while ( have_posts() ) : the_post()
        search_index  
        // Clase adicional si es el primer resultado
        extra_class = ( search_index === 1 ) ?  first-result : 
        ?gt

        ltarticle id=post-lt?php the_ID() ?gt class=search-itemlt?php echo esc_attr( extra_class ) ?gtgt
            ltheader class=search-item-headergt
                lth2 class=search-item-titlegtlta href=lt?php the_permalink() ?gtgtlt?php the_title() ?gtlt/agtlt/h2gt
            lt/headergt
            ltdiv class=search-item-thumbgt
                lt?php
                if ( has_post_thumbnail() ) {
                    the_post_thumbnail( medium )
                }
                ?gt
            lt/divgt
            ltdiv class=search-item-excerptgtlt?php the_excerpt() ?gtlt/divgt
        lt/articlegt

        lt?php
    endwhile
endif
?gt

En este ejemplo usamos la clase first-result para el primer resultado. El markup real (etiquetas) dependerá de tu tema, pero el patrón es el mismo: asignar la clase condicionalmente.

Método 2 — Añadir la clase con un filtro en functions.php

Si prefieres no tocar el loop del tema, puedes usar un filtro que añada una clase al primer post en búsquedas. Este método mantiene limpio el template y centraliza la lógica.

lt?php
// Añadir a functions.php del tema hijo
add_filter( post_class, mi_post_class_primer_resultado, 10, 3 )
function mi_post_class_primer_resultado( classes, class, post_id ) {
    if ( is_search() ) {
        // Usamos una variable estática para contar durante el loop
        static search_counter = 0
        if ( did_action( loop_start ) ) {
            // Reiniciar si se vuelve a ejecutar en otra consulta
        }
        search_counter  
        if ( 1 === search_counter ) {
            classes[] = first-result
        }
    }
    return classes
}
?gt

Este enfoque usa post_class para inyectar la clase. Ten cuidado si hay loops anidados o queries personalizados en esos casos conviene resetear el contador cuando finaliza la consulta.

Método 3 — Solo CSS (si la estructura lo permite)

Si el HTML genera una lista ordenada o un contenedor con elementos consecutivos (por ejemplo ltulgtltligt o bloques de posts con contenedor padre), puedes seleccionar el primer hijo con :first-child o :first-of-type y aplicar estilos especiales sin tocar PHP.

/ Ejemplo cuando los resultados están dentro de .search-results (ul > li) /
.search-results li:first-child {
    grid-column: 1 / -1 / en un grid podría ocupar todo el ancho /
    background: linear-gradient(180deg, #ffffff, #fbfbfe)
    box-shadow: 0 6px 24px rgba(16,24,40,.12)
    border-radius: 12px
    padding: 24px
    display: flex
    gap: 20px
}
.search-results li:first-child .thumb {
    flex: 0 0 280px
    max-width: 280px
    border-radius: 8px
    overflow: hidden
}
.search-results li:first-child .content {
    flex: 1 1 auto
}

Este método es el más simple y seguro siempre que el HTML tenga el orden esperado y no existan wrappers intermedios.

Estilos CSS detallados para la tarjeta destacada

A continuación un conjunto completo de estilos para convertir el primer resultado en una tarjeta atractiva, con imagen destacada, título, meta y extracto. Ajusta colores, tipografías y tamaños a tu identidad.

/ Estilos base para los items de búsqueda /
.search-item {
    display: block
    padding: 12px
    border-bottom: 1px solid rgba(0,0,0,0.06)
    transition: transform .18s ease, box-shadow .18s ease
}

/ Estilos para el primer resultado (tarjeta destacada) /
.search-item.first-result {
    display: grid
    grid-template-columns: 320px 1fr
    gap: 24px
    padding: 28px
    margin-bottom: 20px
    background: linear-gradient(180deg,#fff #fbfbfe)
    border-radius: 14px
    box-shadow: 0 10px 40px rgba(15,23,42,0.08)
    border: 1px solid rgba(16,24,40,0.04)
    align-items: start
}

/ Imagen y contenedor /
.search-item.first-result .search-item-thumb img {
    width: 100%
    height: auto
    display: block
    border-radius: 10px
    object-fit: cover
}

/ Contenido textual /
.search-item.first-result .search-item-title a {
    font-size: 1.35rem
    line-height: 1.15
    color: #0b2b40
    text-decoration: none
    font-weight: 700
}
.search-item.first-result .search-item-excerpt {
    margin-top: 10px
    color: #334155
    font-size: .98rem
    line-height: 1.6
}
.search-item.first-result .search-meta {
    display: flex
    gap: 12px
    color: #64748b
    font-size: .9rem
    margin-top: 12px
}

/ Hover sutil para interactividad /
.search-item.first-result:hover {
    transform: translateY(-6px)
    box-shadow: 0 18px 52px rgba(15,23,42,0.12)
}

/ Responsive: en pantallas pequeñas, stack vertical /
@media (max-width: 760px) {
    .search-item.first-result {
        grid-template-columns: 1fr
        padding: 18px
    }
    .search-item.first-result .search-item-thumb {
        order: -1 / mostrar la imagen arriba /
    }
}

Markup de ejemplo (fragmento) usado con los estilos

ltarticle class=search-item first-resultgt
  ltdiv class=search-item-thumbgt
    ltimg src=https://ejemplo.com/wp-content/uploads/2025/01/imagen.jpg alt=Título del postgt
  lt/divgt
  ltdiv class=search-item-bodygt
    lth2 class=search-item-titlegtlta href=https://ejemplo.com/mi-postgtTítulo destacado del resultadolt/agtlt/h2gt
    ltdiv class=search-metagt
      ltspan class=meta-dategt10 de enero, 2025lt/spangt
      ltspan class=meta-authorgtpor Autorlt/spangt
    lt/divgt
    ltdiv class=search-item-excerptgtExtracto breve que resume el contenido del post y convence al usuario a hacer clic.lt/divgt
  lt/divgt
lt/articlegt

Cómo hacerlo en el editor de bloques (Query Loop)

Si usas el Query Loop Block del editor (Gutenberg), el bloque renderizará posts con una clase de contenedor padre. Puedes seleccionar el primer post con CSS si la estructura es consistente. Ejemplo para bloque de posts:

/ Selector ejemplo para el primer post dentro del Query Loop /
.wp-block-post-template > .wp-block-post:first-child {
    / mismos estilos de tarjeta aquí /
}

Si el Query Loop genera marcados distintos, inspecciona el DOM y ajusta el selector para alcanzar el primer elemento.

Tabla comparativa: métodos

Método Pros Contras
Modificar loop (PHP) Control absoluto sobre la clase y el marcado Requiere editar templates, riesgo si no se usa tema hijo
Filtro post_class No tocar templates, centralizado Puede requerir manejo extra para loops anidados
Solo CSS (:first-child) Sin tocar PHP, rápido Funciona solo si el DOM está en orden y sin wrappers inesperados

Accesibilidad y buenas prácticas

Rendimiento y caché

Evita cargar imágenes enormes en la tarjeta destacada usa tamaños de imagen adaptativos (srcset) o tamaños registrados con add_image_size y the_post_thumbnail( mi-size ). Si tu sitio usa caché (plugins o CDN), limpia la caché después de implementar cambios para verlos reflejados.

Ejemplo avanzado: imagen más grande en desktop y lazy-loading

lt?php
// Dentro del template: usar tamaño personalizado y attribute loading=lazy
if ( has_post_thumbnail() ) {
    the_post_thumbnail( large, array( loading =gt lazy, alt =gt get_the_title() ) )
} else {
    // fallback: imagen por defecto
    echo ltimg src=https://ejemplo.com/placeholder.jpg alt=Imagen por defecto loading=lazygt
}
?gt

Pruebas y despliegue

  1. Haz los cambios en un tema hijo o entorno de staging.
  2. Comprueba la apariencia en varios tamaños de pantalla y navegadores.
  3. Verifica que el primer resultado se destaque solo en búsquedas (is_search()).
  4. Revisa accesibilidad (lectores de pantalla, contraste).
  5. Despliega al sitio en producción y limpia caché/preview.

Conclusión

Destacar el primer resultado de búsqueda en WordPress aporta dinamismo y puede aumentar la tasa de clics hacia contenido clave. Las tres aproximaciones presentadas (modificar el loop, usar filter en functions.php o aplicar CSS puro) se adaptan a distintas necesidades y niveles de acceso al tema. Utiliza la que mejor encaje con tu flujo de trabajo y recuerda probar en móviles y revisar accesibilidad.

Fin del artículo.



Leave a Reply

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