Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
El primer artículo de esta serie ha consistido en una introducción al mundo de los filtros de WordPress. En este tutorial vamos a empezar a repasar una selección de 50 filtros explicando qué hacen y mostrando ejemplos de cada uno.
Así que, sin más preámbulos, ¡aquí tienes la primera ronda de estos 50 filtros!
Cambiar los mensajes de error predeterminados para el inicio de sesión
WordPress proporciona demasiada información cuando muestra un error de inicio de sesión: “La contraseña que has introducido para el usuario barisunver es incorrecta.” Esto significa que los hackers podrán podrían probar distintos nombres de usuario hasta descubrir cuál es tu nombre de usuario. Puedes deshabilitar este tipo de mensajes gracias a este filtro.
Ejemplo: Solucionar el “Problema TMI”
Vamos a cambiar todos los mensajes de error a una cadena vacía para evitar que los hackers descubran nuestras credenciales de inicio de sesión:
1 |
<?php
|
2 |
|
3 |
add_filter( 'login_errors', 'login_errors_example' ); |
4 |
|
5 |
function login_errors_example( $error ) { |
6 |
$error = ''; |
7 |
return $error; |
8 |
}
|
9 |
|
10 |
?>
|
Ahí lo tienes. Así está mucho mejor.
Redirigir a los usuarios que realizan un comentario hacia otra página
Después de publicar un comentario en WordPress, permanecemos en la misma página. Sí, es lo lógico, ¿pero sabías que puedes redirigir a los usuarios que dejen un comentario a otra página después de que lo hayan publicado? El filtro comment_post_redirect te permite hacer justo esto, ¡y creo haber encontrado el ejemplo perfecto para este filtro!
Ejemplo: Redirigir al usuario hacia una página de suscripción después de que haya publicado un comentario
Los usuarios que hayan dejado un comentario probablemente serán más proclives a “seguir" los artículos de tu blog, ¿verdad? Por tanto, si los redirigimos hacia una página que diga “¡Gracias por tu comentario! ¿Te gustaría suscribirte a mi blog?”, ¡podríamos convertir a estos usuarios en suscriptores! Y además es una tarea realmente sencilla, con ayuda de nuestro querido filtro comment_post_redirect:
1 |
<?php
|
2 |
|
3 |
add_filter( 'comment_post_redirect', 'comment_post_redirect_example' ); |
4 |
|
5 |
function comment_post_redirect_example( $location ) { |
6 |
return '/thanks-for-your-comment/'; |
7 |
}
|
8 |
|
9 |
?>
|
Observa que WordPress usa la función wp_safe_redirect() lo que significa que debes usar una página local o una página proveniente de un host permitido (consultar más abajo el filtro allowed_redirect_hosts).
Permitir redirecciones externas para la función wp_safe_redirect()
Por defecto, la función wp_safe_redirect() no permite redirecciones externas. Sin embargo, cuando usemos este filtro, podemos cambiar ese comportamiento y especificar hosts externos.
Ejemplo: Permitir redirecciones hacia subdominios
Como la función wp_safe_redirect() sólo permite redirecciones pertenecientes a tu misma instalación de WordPress, los subdominios de tu propio dominio también quedan fuera de esta limitación.
Hagamos que WordPress las permita:
1 |
<?php
|
2 |
|
3 |
add_filter( 'allowed_redirect_hosts', 'allowed_redirect_hosts_example' ); |
4 |
|
5 |
function allowed_redirect_hosts_example( $content ) { |
6 |
$content[] = 'forum.mywebsite.com'; |
7 |
$content[] = 'welcome.mywebsite.com'; |
8 |
$content[] = 'help.mywebsite.com'; |
9 |
return $content; |
10 |
}
|
11 |
|
12 |
// Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/allowed_redirect_hosts
|
13 |
|
14 |
?>
|
Añadir clases a <body>
La función body_class() es sencillamente increíble. Proporciona distintas clases para la etiqueta body en diferentes páginas de manera que puedas usar tu o tus archivos CSS de forma más eficiente. Y con el filtro del mismo nombre, body_class(), puedes añadir o eliminar clases.
Ejemplo: Añadir clases de categoría a la etiqueta <body> de las páginas de las entradas
Si necesitas distintos estilos para cada una de tus categorías, el filtro body_class puede ayudarte añadiendo clases con los nombres de las categorías en las etiquetas body de las páginas de tus entradas.
Aquí tienes cómo hacerlo:
1 |
<?php
|
2 |
|
3 |
add_filter( 'body_class', 'body_class_example' ); |
4 |
|
5 |
function body_class_example( $classes ) { |
6 |
if( is_single() ) { |
7 |
foreach( get_the_category( get_the_ID() ) as $category ) |
8 |
$classes[] = 'cat-' . $category->category_nicename; |
9 |
}
|
10 |
return $classes; |
11 |
}
|
12 |
|
13 |
// Example source: https://codex.wordpress.org/Function_Reference/body_class#Add_Classes_By_Filters
|
14 |
|
15 |
?>
|
Si tienes una categoría denominada "Mundo", puedes usar la clase .cat-mundo para aplicar estilos a la categoría "Mundo".
Cambiar la configuración regional
WordPress es el sistema de gestión de contenidos número 1 en el mundo porque nos permite traducir prácticamente cada fragmento de su texto. Y el filtro locale nos permite establecer la región para nuestras instalaciones WordPress.
Ejemplo: Cambiar el idioma del sitio web con un parámetro de URL
Si tienes un sitio web en varios idiomas, una forma fácil de cambiar de uno a otro podría habilitarse mediante un parámetro de URL, como en el siguiente ejemplo:
1 |
<?php
|
2 |
|
3 |
add_filter( 'locale', 'locale_example' ); |
4 |
|
5 |
function locale_example( $lang ) { |
6 |
if ( 'tr' == $_GET['language'] ) { |
7 |
return 'tr_TR'; |
8 |
} else { |
9 |
return $lang; |
10 |
}
|
11 |
}
|
12 |
|
13 |
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/locale
|
14 |
|
15 |
?>
|
Ahora, cuando crees un parámetro de url como misitioweb.com/?language=tr, la región de tu sitio web cambiará a turco. No lo hará, por supuesto, el contenido de la entrada, pero es un comienzo.
Filtrado de saneado para nombres de usuario
WordPress limpia los nombres de usuario mediante una función de saneamiento llamada sanitize_user(). Con el filtro del mismo nombre, podrás personalizar esta función.
Ejemplo: Aceptar solo nombres de usuario en minúsculas
Si no quieres aceptar nombres de usuario con letras mayúsculas (ya sea "SHOUTINGBOY88" o "CrazyGirl92"), puedes usar la función PHP strtolower y engancharla al filtro sanitize_user que mostramos aquí abajo:
1 |
<?php
|
2 |
|
3 |
add_filter( 'sanitize_user', 'strtolower' ); |
4 |
|
5 |
// Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/sanitize_user
|
6 |
|
7 |
?>
|
Este probablemente sea uno de los ejemplos de filtros más sencillos de esta serie.
Filtrar el contenido de la entrada
Este no necesita mucha introducción: el filtro the_content nos permite manipular el contenido de la entrada.
Ejemplo: Eliminar las etiquetas <p> que envuelven las imágenes
WordPress no nos permite mostrar imágenes fuera de un párrafo, las envuelve automáticamente dentro de etiquetas de párrafo <p>, algo que a mí personalmente me resulta molesto. Si a ti te ocurre lo mismo, puedes eliminar las etiquetas <p> con ayuda de este pequeño fragmento de código:
1 |
<?php
|
2 |
|
3 |
add_filter( 'the_content', 'the_content_example' ); |
4 |
|
5 |
function the_content_example( $content ) { |
6 |
return preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content); |
7 |
}
|
8 |
|
9 |
// Example source: http://wpsnipp.com/index.php/functions-php/remove-p-tag-from-around-images-in-the_content/
|
10 |
|
11 |
?>
|
Filtrar los formularios de las entradas protegidas mediante contraseña
En las entradas protegidas con contraseña, WordPress sustituye automáticamente el contenido de la entrada por un formulario en el que debes introducirla. Con el filtro the_password_form, podrás editar fácilmente este formulario.
Ejemplo: Simplificar el formulario de la contraseña
Si habitualmente proteges con contraseña las entradas de tu sitio WordPress y no quieres que aparezca el texto “Esta publicación está protegida con contraseña.
Por favor, para verlo introduce tu contraseña aquí abajo:” una y otra vez en bucle, puedes limpiarlo y simplificar el formulario de la contraseña con ayuda de este fragmento de código:
1 |
<?php
|
2 |
|
3 |
add_filter( 'the_password_form', 'the_password_form_example' ); |
4 |
|
5 |
function the_password_form_example() { |
6 |
$output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">'; |
7 |
$output .= '<span>' . __( "Enter the password:" ) . ' </span>'; |
8 |
$output .= '<input name="post_password" type="password" size="20" />'; |
9 |
$output .= '<input type="submit" name="Submit" value="' . esc_attr__( "Go" ) . '" />'; |
10 |
$output .= '</form>'; |
11 |
return $output; |
12 |
}
|
13 |
|
14 |
// Example source: http://codex.wordpress.org/Using_Password_Protection#Password_Form_Text
|
15 |
|
16 |
?>
|
Ahí lo tienes; ahora sólo aparecerán tres palabras, un campo para introducir la contraseña y un botón para enviarlo, todo en una misma línea.
Filtrar la función the_terms()
Si no estás satisfecho con el aspecto de la función the_terms() en el front-end, o si simplemente quieres usarlo para un propósito distinto, puedes usar el filtro del mismo nombre: the_terms.
Ejemplo: Extraer etiquetas HTML desde la función the_terms()
Hace algunos años, necesité usar las etiquetas de mis entradas en texto plano. Invertí muchas, muchas horas hasta encontrar una solución, al parecer existía una realmente sencilla:
1 |
<?php
|
2 |
|
3 |
add_filter( 'the_terms', 'strip_tags' ); |
4 |
|
5 |
?>
|
No te creerías la cara que puse cuando descubrí que bastaba con enganchar una sencilla función PHP del núcleo en el filtro the_terms.
Cambiar la dirección del email para "Enviado desde"
Cuando WordPress envía correos electrónicos a ti o a los miembros de tu sitio web, usa una dirección de email como wordpress@tusitioweb.com. Con este filtro, podrás cambiar esta dirección.
Ejemplo: Ajustar tu propia dirección de email para "Enviado desde"
Con esta función que devuelve una dirección de correo electrónico distinta, podrás cambiar la dirección predeterminada del remitente de los emails:
1 |
<?php
|
2 |
|
3 |
add_filter( 'wp_mail_from', 'wp_mail_from_example' ); |
4 |
|
5 |
function wp_mail_from_example( $email ) { |
6 |
return 'my.email.address@mywebsite.com'; |
7 |
}
|
8 |
|
9 |
?>
|
Puedes usarla junto con el filtro wp_mail_from_name: la misma lógica, simplemente escribe una función para devolver otra cadena con un nombre personalizado y engancharla al filtro wp_mail_from_name.
Resumiendo la sesión de hoy
En este artículo hemos visto 10 de los 50 filtros que veremos en esta serie. Espero que te haya gustado y hayas aprendido algo nuevo. ¡Nos vemos en el próximo tutorial!
También quiero conocer tu opinión. ¿Qué te parecen estos filtros? Déjanos tus comentarios aquí abajo; y si te ha gustado el artículo, ¡no olvides compartirlo!



