Tutorial WordPress: Estilizar formularios nativos de WordPress (comentarios, búsqueda) con CSS

·

·

Introducción: este artículo explica con todo lujo de detalles cómo estilizar los formularios nativos de WordPress (formulario de comentarios y formulario de búsqueda) usando CSS moderno. Incluye ejemplos concretos listos para copiar/pegar, buenas prácticas de accesibilidad, trucos para integrarlo en cualquier theme (clásico o basado en bloques) y pequeños snippets en PHP para ajustar clases o atributos cuando sea necesario.

1. Entender los formularios nativos de WordPress

Antes de escribir CSS es imprescindible saber qué HTML produce WordPress por defecto. El formulario de comentarios y el de búsqueda usan clases y estructura predecibles:


2. Preparar tu CSS: reset mínimo y variables

Empieza con un reset suave para campos y define variables para colores/tamaños así mantienes coherencia y facilitas ajustes globales.

:root{
  --form-bg: #ffffff
  --input-bg: #fff
  --input-border: #d1d5db
  --input-border-focus: #2563eb
  --input-radius: 8px
  --input-padding: 10px 12px
  --text-color: #0f172a
  --muted: #6b7280
  --btn-bg: #2563eb
  --btn-color: #fff
  --btn-radius: 8px
  --transition-fast: 160ms ease
}

/ Reset básico para inputs/textarea/button /
.comment-form input,
.comment-form textarea,
.search-form .search-field,
input[type=search],
input[type=text],
input[type=email],
input[type=url],
textarea {
  appearance: none
  -webkit-appearance: none
  font: inherit
  color: var(--text-color)
  background: var(--input-bg)
  border: 1px solid var(--input-border)
  border-radius: var(--input-radius)
  padding: var(--input-padding)
  transition: border-color var(--transition-fast), box-shadow var(--transition-fast)
  width: 100%
  box-sizing: border-box
}

3. Estilizado del formulario de comentarios

A continuación un ejemplo completo de estilos para el formulario de comentarios: distribución, labels, campos, botón y estados (hover, focus, error).

/ Contenedor del formulario /
.comment-form{
  background: var(--form-bg)
  padding: 18px
  border-radius: 10px
  box-shadow: 0 1px 2px rgba(15,23,42,0.04)
}

/ Labels más pequeños y con color neutro /
.comment-form label{
  display: block
  font-size: 0.9rem
  color: var(--muted)
  margin-bottom: 6px
}

/ Inputs y textarea con control del tamaño /
.comment-form .comment-form-author,
.comment-form .comment-form-email,
.comment-form .comment-form-url,
.comment-form .comment-form-comment{
  margin-bottom: 14px
}

/ Textarea con altura controlada /
.comment-form textarea {
  min-height: 120px
  resize: vertical
}

/ Botón de envío principal /
.comment-form .form-submit .submit{
  background: var(--btn-bg)
  color: var(--btn-color)
  padding: 10px 16px
  border: none
  border-radius: var(--btn-radius)
  cursor: pointer
  transition: transform 120ms ease, box-shadow 120ms ease
}
.comment-form .form-submit .submit:hover{
  filter: brightness(0.95)
  transform: translateY(-1px)
  box-shadow: 0 4px 12px rgba(37,99,235,0.12)
}

/ Estados de foco accesibles /
.comment-form input:focus,
.comment-form textarea:focus{
  outline: none
  border-color: var(--input-border-focus)
  box-shadow: 0 0 0 4px rgba(37,99,235,0.08)
}

/ Input con error (si JS o servidor añade clase .has-error) /
.comment-form .has-error input,
.comment-form .has-error textarea{
  border-color: #dc2626
  box-shadow: 0 0 0 4px rgba(220,38,38,0.06)
}

/ Campos inline para una segunda columna (responsive) /
@media (min-width: 700px){
  .comment-form .two-col{
    display: grid
    grid-template-columns: 1fr 1fr
    gap: 12px
  }
}

Cómo forzar campos en una misma fila

WordPress no genera una clase por defecto para agrupar campos en dos columnas. Puedes envolver los campos desde tu template o aplicar selectores por posición con CSS. Preferible: modificar la salida para añadir una clase contenedora (ve seccion PHP abajo).

4. Estilizado del formulario de búsqueda

El formulario de búsqueda suele ser compacto y frecuentemente va en header o barra lateral. Aquí estilos para una búsqueda inline y otra con input ampliable.

/ Estilo base /
.search-form{
  display: flex
  gap: 8px
  align-items: center
}

/ Input de búsqueda /
.search-form .search-field{
  padding: 8px 10px
  border-radius: 999px
  border: 1px solid var(--input-border)
  width: 220px
  transition: width 180ms ease, border-color 120ms ease, box-shadow 120ms ease
}

/ Botón redondeado /
.search-form .search-submit{
  background: var(--btn-bg)
  color: var(--btn-color)
  border: none
  padding: 8px 12px
  border-radius: 999px
  cursor: pointer
}

/ Input expandible (por ejemplo en header) /
.search-form.expanded .search-field{
  width: 320px
}

/ Focus accesible /
.search-field:focus{
  border-color: var(--input-border-focus)
  box-shadow: 0 0 0 4px rgba(37,99,235,0.06)
}

5. Accesibilidad y buenas prácticas

/ Visually hidden pero accesible /
.screen-reader-text,
.visually-hidden {
  position: absolute !important
  height: 1px width: 1px
  overflow: hidden
  clip: rect(1px, 1px, 1px, 1px)
  white-space: nowrap
}
input:focus-visible, textarea:focus-visible, button:focus-visible {
  outline: 3px solid rgba(37,99,235,0.14)
  outline-offset: 2px
}

6. Personalizaciones avanzadas y compatibilidad

En algunos casos quieres añadir clases o atributos al HTML del formulario para facilitar el CSS. Aquí dos snippets PHP útiles para usar en functions.php del theme (o plugin específico).

6.1 Añadir clase al botón de envío del formulario de comentarios

/ Añade clase btn-primary al botón submit del comment form /
add_filter(comment_form_submit_field, function(submit_field){
    // Reemplaza la clase por defecto por una con tus clases
    submit_field = str_replace(class=submit, class=submit btn-primary, submit_field)
    return submit_field
})

6.2 Añadir contenedor para agrupar campos (si tu theme lo requiere)

/ Modificar campos del comment form para envolver autor/email en un contenedor two-col /
add_filter(comment_form_defaults, function(defaults){
    // Ajusta defaults[fields][author] y email donde quieras añadir wrapper
    // Ejemplo simplificado: PRE- y POST-HTML para campos (usar con cuidado)
    if(isset(defaults[fields][author])){
        defaults[fields][author] = 
. defaults[fields][author] } if(isset(defaults[fields][email])){ defaults[fields][email] = defaults[fields][email] .
} return defaults })

Nota: personalizaciones que alteran HTML pueden interferir con plugins o con reCAPTCHA probar en staging antes de producción.

7. Trucos y patrones útiles

  1. Placeholder vs label: usa placeholder solo como ayuda adicional nunca elimines etiquetas accesibles.
  2. Indicadores de obligatorio: añade un mediante CSS si quieres, pero es preferible que el servidor devuelva errores claros y que tengas aria-required para lector de pantallas.
  3. Errores visibles: cuando el servidor devuelve error, añade .has-error al contenedor y muestra mensaje — estiliza con color y icono.
  4. Compatibilidad con temas oscuros: define variables alternativas o usa media query prefers-color-scheme.
/ Ejemplo: required marker usando pseudo-elemento en label /
.comment-form label.required::after{
  content:  
  color: #dc2626
  margin-left: 4px
}

/ Soporte modo oscuro /
@media (prefers-color-scheme: dark){
  :root{
    --form-bg: #0b1220
    --input-bg: #071024
    --input-border: #23334a
    --text-color: #e6eef8
    --muted: #94a3b8
    --btn-bg: #1e40af
  }
}

8. Depuración con DevTools y reglas de especificidad

9. Performance y mantenimiento

10. Resumen práctico rápido

Recuerda probar siempre en distintos navegadores y dispositivos. Los ejemplos de CSS y PHP en este artículo son plantillas que puedes adaptar a tu identidad visual, añadiendo tipografías, iconos o animaciones controladas para no perjudicar la usabilidad ni la accesibilidad.



Leave a Reply

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