Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
En las anteriores partes de esta serie, vimos 40 filtros WordPress. En este tutorial vamos a ver los últimos 10 filtros acompañados de ejemplos para cada uno.
¡Vamos!
Filtrar la Fuente de Carga de Script
WordPress tiene su propio cargador de script, wp_enqueue_script()
, que nos permite "encolar" archivos JavaScript en lugar de tener que introducir a mano su código. Y el filtro llamado script_loader_src
nos permite determinar cómo serán encolados y su "output".
Ejemplo: Eliminar el Parámetro Versión de los Scripts
Google Page Speed, Yahoo YSlow y otras herramientas de medición de rendimiento normalmente odian los parámetros en las URLs de los archivos JavaScript. Y por buenos motivos: los scripts con parámetros al final de sus URLs no son cacheados por los "servidores proxy" (aquí puedes consultar más sobre el tema) y tristemente, WordPress admite por defecto los parámetros de versión de los scripts (y también de los estilos). Afortunadamente, podemos eliminar estos parámetros ver
con unas cuantas líneas de código:
<?php function script_loader_src_example( $src ) { return remove_query_arg( 'ver', $src ); } add_filter( 'script_loader_src', 'script_loader_src_example' ); // Tiny bonus: You can do it with styles, too! add_filter( 'style_loader_src', 'script_loader_src_example' ); // Example source: https://www.wpmayor.com/15-practical-ways-boost-wordpress-speed/ ?>
¡Hecho! Tus archivos JavaScript (y CSS) ya no mostrarán ningún parámetro de versión.
Si quieres aprender más sobre el uso adecuado de JavaScript en WordPress, consulta mi artículo sobre este tema.
Añadir HTML al metabox "Imagen destacada"
El filtro admin_post_thumbnail_html
, como su propio nombre indica, te permite añadir contenido HTML dentro del metabox "Imagen destacada". El HTML aparecerá justo bajo el enlace "Establecer imagen destacada".
Ejemplo: Cómo Ayudar a Establecer la Imagen Destacada a Tu Cliente
Imagina que estás creando un blog personal para tu cliente, pero insiste en mantener él mismo el blog en lugar de contratar a un asistente. Siempre olvida de cómo añadir una imagen destacada (él lo llama "imagen superior".) por eso quieres dejarle un aviso en la página Nueva Entrada. Aquí tienes cómo hacerlo:
<?php add_filter( 'admin_post_thumbnail_html', 'admin_post_thumbnail_html_example' ); function admin_post_thumbnail_html_example( $html ) { return $html .= '<p>Hi Mr. Smith! Click above to add an image to be displayed at the top of your post. Remember: <strong>The width of the image should be at least 900px</strong>!</p>'; } ?>
Con tu útil recordatorio, tu cliente no volverá a olvidar establecer una "imagen superior" de un tamaño mínimo de 900 píxeles.
Controlar los Ataques Incesantes de Comentarios - comment_flood_filter
Por defecto, WordPress previene los agentes que saturan con comentarios, aquellos que comentan tus entradas incesantemente. Por ejemplo, si un usuario envía un comentario a una entrada de tu sitio web, deben esperar 15 segundos (valor predeterminado) antes de poder enviar un nuevo comentario. Este filtro te permite cambiar el intervalo de tiempo establecido por defecto para poder enviar un nuevo comentario – o deshabilitar la funcionalidad por completo.
Ejemplo: Aumentar el Tiempo de Espera para el Envío de un Nuevo Comentario
Como he dicho, WordPress obliga a que los usuarios tengan que esperar 15 segundos antes de poder enviar un nuevo comentario. En algunas situaciones, podrías necesitar aumentar este límite de tiempo a por ejemplo, 60 segundos. Aquí tienes cómo hacerlo:
<?php add_filter( 'comment_flood_filter', 'comment_flood_filter_example', 10, 3 ); function comment_flood_filter_example( $flood_control, $time_last, $time_new ) { $seconds = 60; if ( ( $time_new - $time_last ) < $seconds ) return true; return false; } // Example source: http://codex.wordpress.org/FAQ_Working_with_WordPress#How_do_I_prevent_comment_flooding.3F ?>
Cambiar el valor "60" a cualquier otro.
Ejemplo extra: Deshabilitar la Comprobación del Envío de Comentarios Insistentes
Si no te importa que los usuarios envíen comentarios incesantemente, puedes deshabilitar esta comprobación usando las siguientes dos sencillas líneas de código:
<?php remove_all_filters( 'comment_flood_filter' ); add_filter( 'comment_flood_filter', '__return_false', 10, 3 ); ?>
¿Has visto la función remove_all_filters()
? Como su nombre sugiere, elimina todas las funciones de filtrado de un hook de filtro.
Cambiar los Elementos de la Sección "De un vistazo"
La sección "De un vistazo" (antes llamada "Ahora") nos informa del número de entradas, páginas y comentarios que tenemos en la base de datos de nuestro sitio web. El filtro dashboard_glance_items
nos permite mostrar información adicional, como el número de entradas de un "post type" personalizado.
Ejemplo: Mostrar Tus Tipos de Entrada "Eventos" en la Sección "De un vistazo"
Imagina que tienes un "blog de eventos" en el que mantienes informados a los usuarios sobre nuevos eventos locales que publicas en un tipo de entrada personalizada llamada "Eventos" (y cuyo id es event
). Para poder ver la cantidad de eventos que aparecen en tu blog, puedes usar la siguiente función y engancharla en el filtro dashboard_glance_items
como en este ejemplo:
<?php add_filter( 'dashboard_glance_items', 'dashboard_glance_items_example' ); function dashboard_glance_items_example( $items = array() ) { $post_types = array( 'event' ); foreach( $post_types as $type ) { if( ! post_type_exists( $type ) ) continue; $num_posts = wp_count_posts( $type ); if( $num_posts ) { $published = intval( $num_posts->publish ); $post_type = get_post_type_object( $type ); $text = _n( '%s ' . $post_type->labels->singular_name, '%s ' . $post_type->labels->name, $published, 'your_textdomain' ); $text = sprintf( $text, number_format_i18n( $published ) ); if ( current_user_can( $post_type->cap->edit_posts ) ) { $output = '<a href="edit.php?post_type=' . $post_type->name . '">' . $text . '</a>'; echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>'; } else { $output = '<span>' . $text . '</span>'; echo '<li class="post-count ' . $post_type->name . '-count">' . $output . '</li>'; } } } return $items; } // Example source: http://www.trickspanda.com/2014/03/add-custom-post-types-glance-dashboard-widget-wordpress/ ?>
Fácil, ¿no? CAmbia el valor de la variable (array) $post_types
para adecuarla a tus necesidades.
Cambiar los Mensajes Predeterminados del Formulario de Inicio de Sesión
El filtro login_message
nos permite editar los mensajes que aparecen sobre el formulario de inicio de sesión de nuestra instalación WordPress. (No mensajes de "error", sino mensajes neutrales.)
Ejemplo: Cambiar los Mensajes Predeterminados "Contraseña perdida"
Si en alguna ocasión necesitas cambiar las instrucciones predeterminadas de la página "Contraseña perdida" ("¿Perdiste tu contraseña? Por favor, introduce tu nombre de usuario o correo electrónico. Recibirás un enlace para crear una contraseña nueva por correo electrónico."), puedes cambiarlo de la siguiente manera:
<?php add_filter( 'login_message', 'login_message_example' ); function login_message_example( $message ) { $action = $_REQUEST['action']; if( $action == 'lostpassword' ) { $message = '<p class="message">Enter your email address, then check your inbox for the "reset password" link!</p>'; return $message; } return; } // Example source: http://www.pypelineweb.com/blog/change-wordpress-login-message-filter-it-out/ ?>
Existe varias acciones (action
s) que puedes encontrar en el archivo login.php
:
logout
-
lostpassword
yretrievepassword
(alias) -
resetpass
yrp
(alias) register
login
De la misma manera que hemos mostrado en nuestro ejemplo, puedes escribir distintos mensajes para las distintas acciones que aparecen en login.php
.
Cambiar los Mensajes de Actualización en Lote
Hay mensajes que aparecen cuando actualizas, eliminas o recuperas de la papelera las entradas. Si quieres editar estos mensajes, tu solución es bulk_post_update_messages
.
Ejemplo: Editar los Mensajes Personalizados para los Tipos de Entradas Personalizadas
Digamos que no te gusta la manera en la que se muestran los mensajes de las acciones en lote para tus tipos de entradas personalizadas "event" y quieres cambiarlos. Aquí tienes cómo hacerlo:
<?php add_filter( 'bulk_post_updated_messages', 'bulk_post_updated_messages_example', 10, 2 ); function bulk_post_updated_messages_example( $bulk_messages, $bulk_counts ) { $bulk_messages['event'] = array( 'updated' => _n( '%s event updated.', '%s events updated.', $bulk_counts['updated'] ), 'locked' => _n( '%s event not updated, somebody is editing it.', '%s events not updated, somebody is editing them.', $bulk_counts['locked'] ), 'deleted' => _n( '%s event permanently deleted.', '%s events permanently deleted.', $bulk_counts['deleted'] ), 'trashed' => _n( '%s event moved to the Trash.', '%s events moved to the Trash.', $bulk_counts['trashed'] ), 'untrashed' => _n( '%s event restored from the Trash.', '%s events restored from the Trash.', $bulk_counts['untrashed'] ), ); return $bulk_messages; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/bulk_post_updated_messages ?>
Fácil, ¿no? Recuerda hacer las cadenas traducibles si no vas a ser el único que usará el plugin o el tema.
Filtrar el Widget Predeterminado de las Categorías
En algunos casos, podrías necesitar jugar con el widget del núcleo Categorías. Con el filtro widget_categories_args
, puedes lograrlo.
Ejemplo: Excluir Categorías del Widget
Si alguna vez necesitas "ocultar" algunas categorías del widget, usa este fragmento de código:
<?php add_filter( 'widget_categories_args', 'widget_categories_args_example' ); function widget_categories_args_example( $cat_args ) { $exclude_arr = array( 4, 10 ); if( isset( $cat_args['exclude'] ) && !empty( $cat_args['exclude'] ) ) $exclude_arr = array_unique( array_merge( explode( ',', $cat_args['exclude'] ), $exclude_arr ) ); $cat_args['exclude'] = implode( ',', $exclude_arr ); return $cat_args; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/widget_categories_args ?>
Cambia los elementos del array $exclude_arr
con los IDs de tus categorías "unwanted" y ya lo tienes listo.
Redirigir al Usuario Tras Registrarse Con Éxito
Por defecto, WordPress te recuerda que verifiques tu email tras el registro y no te redirige a ningún sitio. Con el filtro registration_redirect
, sin embargo, puedes establecer una redirección segura personalizada a la que redirigir a los usuarios que se han registrado con éxito.
Ejemplo: Permitir a los Nuevos Usuarios Descargar Tu Increíble eBook
Si ofreces un e-Book gratuito a tus visitas tras su registro en tu sitio web, puedes redirigirlos a una página con un enlace de descarga de tu eBook usando este sencillo fragmento de código:
<?php add_filter( 'registration_redirect', 'registration_redirect_example' ); function registration_redirect_example() { return home_url( '/your-free-ebook/' ); } // Example source: http://wpsnipp.com/index.php/functions-php/redirect-a-successful-registration-page/ ?>
Recuerda, la redirección se hace con la función wp_safe_redirect()
, lo que significa que no podrás redirigirlos a un sitio externo a menos que uses el filtro allowed_redirect_hosts
para especificar hosts externos y "seguros". Vimos este filtro en nuestro primer artículo de ejemplos, consúltalo si no lo has hecho todavía.
Alterar los Campos del Formulario de Comentarios
WordPress tiene la función comment_form()
que muestra el formulario de contacto, puedes cambiar este campo usando los argumentos aceptados por esta función. Sin embargo, si estás desarrollando un plugin, no serás capaz de cambiar ningún parámetro de la función. Este filtro nos permite cambiar el código HTML de los campos predeterminados del formulario, o eliminarlos.
Ejemplo: Eliminar el Campo URL del Formulario del Comentario
Imagina que como diseñador web freelance, estás creando "un plugin con ajustes por defecto" que te sirva para todos tus clientes cuya función es mejorar la seguridad. Quieres eliminar los campos de URL en los formularios de los comentarios de todos tus sitios web. Puedes añadir una sencilla función (y engancharla a un filtro) para hacerlo realidad:
<?php add_filter( 'comment_form_default_fields', 'comment_form_default_fields_example' ); function comment_form_default_fields_example( $fields ) { unset( $fields['url'] ); return $fields; } // Example source: http://wpsnipp.com/index.php/comment/remove-unset-url-field-from-comment-form/ ?>
Pega estas líneas en tu plugin y, ¡ya lo tienes!
Alterar la Lista de Tipos de Archivo Admitidos
Por defecto, puedes subir ciertos tipos de archivo a la Biblioteca de Medios de WordPress - consulta aquí la lista con todos los tipos de archivo admitidos. Con ayuda del filtro upload_mime
, puedes hacer cambios en la lista de archivos aceptados.
Ejemplo: Evitar la Carga de GIFs
Ah, los GIFs… Fueron muy populares allá por el 1999 y lo seguían siendo en el 2014. ¿Sabías que unos de los primeros memes fué el GIF de un bebé bailando? Eran tiempos más simples en los que creábamos "páginas de inicio" en Yahoo! Geocities y disfrutábamos del molesto sonido de mono cada vez que un amigo nos enviaba un mensaje instantáneo.
Ehem, sea como sea… si quieres acabar con este sinsentido y evitar que los usuarios suban GIFs a la Biblioteca de Medios de tu sitio web, puedes deshabilitar la carga de GIFs con este sencillo fragmento de código:
<?php add_filter( 'upload_mimes', 'upload_mimes_example' ); function upload_mimes_example( $existing_mimes = array() ) { unset( $existing_mimes['gif'] ); return $existing_mimes; } // Example source: http://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes ?>
Con esto decimos adiós a los clips de cuatro segundos que ya no es necesario seguir ver más de una vez, pero que se repiten incesantemente.
Final de la Quinta Parte
En este artículo hemos visto la última ronda de nuestro total de 50 filtros. espero que te haya gustado y hayas aprendido algo nuevo. En el próximo artículo, vamos a echar un rápido repaso a todo lo visto y con ello cerraremos esta serie. ¡Nos encontramos allí!
También me gustaría conocer tu opinión sobre lo visto hoy. ¿Qué te parecen estos filtros? Déjanos tu comentario 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