Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
En los anteriores artículos de esta serie, empezamos a repasar 50 filtros de WordPress. Seleccionados de entre los cientos que existen, comenzamos viendo 10 de ellos.
En este tutorial, vamos a repasar otra ronda de esos 50 filtros y veremos algunos ejemplos para cada uno.
¡Empecemos!
Trabajar con datos traducibles en WordPress
Una de las mejores características de WordPress es que cada fragmento de texto está preparado para su traducción. No obstante, si el idioma de tu sitio web es el inglés, no necesitarás esta característica - ¿o quizá sí?
El filtro gettext
podría serte útil de una forma distinta. Veamos un interesante ejemplo.
Ejemplo: ¡Corregir la gramática de otro desarrollador!
Imagina que encuentras un interesante plugin con el que trabajar, pero te das cuenta de que su propietario no habla inglés muy bien, y que algunos textos dentro del código no están muy bien escritos. Por fortuna las cadenas son traducibles, así que serás capaz de cambiarlas con la ayuda del filtro gettext
.
Veamos cómo:
<?php add_filter( 'gettext', 'gettext_example', 20, 3 ); function gettext_example( $translated_text, $text, $domain ) { switch ( $translated_text ) { case 'E-meil Adress' : $translated_text = __( 'Email Address', 'plugin_text_domain' ); break; } return $translated_text } // Example source: https://speakinginbytes.com/2013/10/gettext-filter-wordpress/ ?>
Limpiar el slug
WordPress usa una función llamada sanitize_title()
para limpiar los títulos, sustituye los espacios por guiones y los prepara para poderlos guardar como slugs. Con el filtro sanitize_title
(sí, el con el mismo nombre) podrás ampliar esta función.
Ejemplo: Eliminar las palabras “El” del slug
Si no quieres que la palabra “el” aparezca en tus slugs, puedes eliminarla en todos ellos con el siguiente fragmento de código:
<?php add_filter( 'sanitize_title', 'sanitize_title_example' ); function sanitize_title_example( $title ) { $title = str_replace( '-the-', '-', $title ); $title = preg_replace( '/^the-/', '', $title ); return $title; } ?>
Una solución sencilla y elegante.
Crear excepciones para la texturización de los shortcodes
Este útiltimo filtro “te permite especificar qué shortcodes no deberían ser ejecutados a través de la función wptexturize()
”, tal y como explica el Codex.
Ejemplo: Excluye tu código de la texturización
Si quieres excluir el shortcode que has creado de la texturización, usa este código para añadir el nombre de tu shortcode a la lista “do not texturize”:
<?php add_filter( 'no_texturize_shortcodes', 'no_texturize_shortcodes_example' ); function no_texturize_shortcodes_example( $shortcodes ) { $shortcodes[] = 'myshortcode'; return $shortcodes; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/no_texturize_shortcodes ?>
Bastante sencillo, ¿no?
Filtrar el estado de aprobación de un comentario
WordPress tiene su propio método de comprobación para los comentarios (lo que podría ser muy útil contra los spammers) antes de decidir si el comentario debería ser marcado como spam, ser enviado a la cola de moderación o aprobado. El filtro pre_comment_approve
permite que los plugins puedan ayudar con esta decisión.
Ejemplo: Marcar comentarios con largos nombres de autor como spam
En mi país, Turquía, los que envían spam a WordPress usan normalmente nombres realmente largos, en ocasiones la propia URL.
Con el siguiente fragmento de código, podrás eliminar automáticamente los spammers que usan nombres como “Envíos a domicilio e internacionales con precios extremadamente bajos (haz clic aquí para más información)”:
<?php add_filter( 'pre_comment_approved', 'pre_comment_approved_example', 99, 2 ); function pre_comment_approved_example( $approved, $commentdata ) { return ( strlen( $commentdata['comment_author'] ) > 75 ) ? 'spam' : $approved; } // Example source: https://gist.github.com/norcross/5468979 ?>
¡Doy las gracias especialmente a Andrew Norcross por la idea!
Consejo adicional: Si quieres eliminar spam comprobando la longitud de la URL del autor del comentario, usa 'comment_author_url' en lugar de 'comment_author'. De hecho, Andrew Norcross usaba la URL en su truco original.
Configurar la función "Publicar por correo electrónico"
¿Sabías que puedes publicar en tu blog WordPress vía email? WordPress ofrece esta poco utilizada característica y te permite activarla y desactivarla mediante el filtro enable_post_by_email_configuration
.
Ejemplo: Activar y desactivar la funcionalidad “Publicar por correo electrónico”
Es posible que desees desactivar esta funcionalidad por alguna razón (quizá por seguridad). Y lo puedes hacer con tan solo una línea de código:
<?php add_filter( 'enable_post_by_email_configuration', '__return_false', 100 ); ?>
O si estás en un sitio WordPress Multisitio y necesitas habilitar la funcionalidad (ya que en las instalaciones multisitio está desactivada por defecto), puedes usar la función __return_true()
:
<?php add_filter( 'enable_post_by_email_configuration', '__return_true', 100 ); ?>
Filtrar los títulos de tu página
La función wp_title()
muestra los títulos de las páginas, los que vemos en las pestañas de nuestros navegadores. Y la función wp_title nos permite manipularlos.
Ejemplo: Reescribir los títulos de tu página – de forma correcta
Un respetado “guru” de WordPress (y editor en Tuts+ Code) Tom McFarlin nos explica en su blog cómo reescribir los títulos de nuestra página adecuadamente con la función wp_title()
y el filtro con el mismo nombre:
Dado que wp_title es una función filtrada, esto significa que podremos proporcionar un gancho personalizado que nos permita definir el esquema para mostrar nuestros títulos no sólo de forma más precisa, sino también correctamente.
<?php add_filter( 'wp_title', 'wp_title_example', 10, 2 ); function wp_title_example( $title, $sep ) { global $paged, $page; if ( is_feed() ) return $title; // Add the site name. $title .= get_bloginfo( 'name' ); // Add the site description for the home/front page. $site_description = get_bloginfo( 'description', 'display' ); if ( $site_description && ( is_home() || is_front_page() ) ) $title = "$title $sep $site_description"; // Add a page number if necessary. if ( $paged >= 2 || $page >= 2 ) $title = sprintf( __( 'Page %s', 'tuts_filter_example' ), max( $paged, $page ) ) . " $sep $title"; return $title; } // Example source: http://tommcfarlin.com/filter-wp-title/ ?>
Asegúrate de leer este artículo. ¡Gracias Tom!
Procesar comentarios antes de que sean almacenados en la base de datos
Si necesitas cualquier ayuda para cambiar los datos de los comentarios (el ID de la entrada del comentario, el nombre de su autor, el email del autor, el sitio web del autor, el tipo de comentario, el ID del usuario en caso de que sea un usuario, el tipo de comentario y el contenido del comentario), preprocess_comment
puede ayudarte.
Ejemplo: Baja el volumen de los que gritan
¿RECIBES MUCHOS COMENTARIOS EN LOS QUE CADA PALABRA ESTÁ EN MAYÚSCULAS? Si es así, puedes cambiar automáticamente esos caracteres a minúsculas con el siguiente fragmento de código:
<?php add_filter( 'preprocess_comment', 'preprocess_comment_example' ); function preprocess_comment_example( $commentdata ) { if( $commentdata['comment_content'] == strtoupper( $commentdata['comment_content'] )) $commentdata['comment_content'] = strtolower( $commentdata['comment_content'] ); return $commentdata; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/preprocess_comment ?>
Genial, ¿no?
Gestionar las redirecciones tras iniciar sesión
Este pequeño filtro nos permite configurar las redirecciones (distintas a las del panel de administración) después del proceso de inicio de sesión, lo que puede ser muy útil en algunos casos.
Ejemplo: Redireccionar a los suscriptores a la página de inicio
Si no quieres que tus usuarios (aquellos con el rol de “suscriptor”) vean tu panel de administración después de iniciar sesión, puedes redirigirlos a la página de inicio de tu sitio web:
<?php add_filter( 'login_redirect', 'login_redirect_example', 10, 3 ); function login_redirect_example( $redirect_to, $request, $user ) { global $user; if ( isset( $user->roles ) && is_array( $user->roles ) ) { if ( in_array( 'subscriber', $user->roles ) ) { return home_url(); } else { return $redirect_to; } } return; } ?>
El Codex nos advierte una cosa: “Asegúrate de usar add_filter
fuera de is_admin()
, ya que esa función no está disponible cuando se invoca el filtro.”
Crear enlaces de acción para tu plugin
Si estás desarrollando un plugin, es posible que te preguntes cómo han añadido otros desarrolladores enlaces bajo el nombre de sus plugins en la página plugins del escritorio. Bueno, pues usan precisamente este filtro.
Ejemplo: Añadir un enlace “Ajustes” para mostrarlo en la página de los plugins
Para añadir un enlace de acción personalizado bajo el nombre de tu plugin que figura en la lista de la página de plugins, puedes usar esta función y engancharla en el filtro:
<?php add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'plugin_action_links_example' ); function plugin_action_links_example( $links ) { $links[] = '<a href="' . get_admin_url( null, 'options-general.php?page=my_plugin_settings' ) . '">' . __( 'Settings' ) . '</a>'; return $links; } // Example source: https://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_(plugin_file_name) ?>
Observa que estamos usando la constante __FILE__
para enganchar nuestra función al filtro con el nombre de tu plugin. Sencillo, ¿no?
Usa esto con cuidado: si abusas del espacio disponible llenándolo de enlaces, la gente te recordará como un spammer.
Filtrar el contenido que está dentro del editor de la entrada
¿Has deseado en alguna ocasión rellenar previamente el editor de la entrada para empezar a escribir con una plantilla de entrada, o dejar anotaciones para tus autores? Puedes hacerlo gracias al filtro the_editor_content
.
Ejemplo: Dejar recordatorios para tus autores
Creemos este ejemplo de “dejar notas para los autores”: si tienes un conjunto de cosas que recordar a las personas que escriben en tu blog, puedes rellenar el editor de la entrada con HTML usando este código:
<?php add_filter( 'the_editor_content', 'the_editor_content_example' ); function the_editor_content_example( $content ) { // Only return the filtered content if it's empty if ( empty( $content ) ) { $template = 'Hey! Don\'t forget to...' . "\n\n"; $template .= '<ul><li>Come up with good tags for the post,</li><li>Set the publish time to 08:00 tomorrow morning,</li><li>Change the slug to a SEO-friendly slug,</li><li>And delete this text, hehe.</li></ul>' . "\n\n"; $template .= 'Bye!'; return $template; } else return $content; } // Example source: http://wpfilte.rs/the_editor_content/ ?>
Cambia la variable $template
por cualquier cosa que quieras y ¡ya lo tienes listo!
Fin de la segunda parte
En este artículo ya hemos acabado la segunda ronda de 50 filtros. Espero que te haya gustado y hayas aprendido algo nuevo. ¡Nos vemos en el próximo!
También me gustaría saber 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!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post