Action hooks y filtros: ejemplos prácticos

Los action hooks y los filtros son muy útiles en todo proyecto web desarrollado con WordPress que se precie. Te permiten “enganchar” una función personalizada o una función existente a WordPress para modificar sus funciones sin editar archivos del núcleo del CMS. En este artículo te mostramos unos cuantos ejemplos de action hooks y filtros que espero que te sirvan de ayuda.

Ejemplos prácticos sobre action hooks y filtros

A continuación te mostramos unos cuantos ejemplos prácticos de action hooks y filtros.

action hooks

Evitar la compresión automática de imágenes

Por defecto, WordPress comprime las imágenes jpg cuando las subes a tu sitio web. Esto es la mar de útil puesto que ahora tanto ancho de banda al usuario, como tiempo de carga. Pero hay veces que es preferible que WordPress no realice este trabajito para que nuestras imágenes no pierdan ni ápice de calidad (por ejemplo, imagínate que eres fotógrafo y utilizas WordPress para mostrar tus trabajos).

Pega este código en el archivo functions.php de tu tema y evita que WordPress comprima tus imágenes automáticamente.

add_filter('jpeg_quality', function($arg){return 100;});

Añadir target=”_blank” a todos los enlaces

Nunca he sido fan de convertir todos los enlaces a target=”_blank”, pero es impresionante como a todos mis clientes les encanta. Si necesitas transformar todos tus enlaces a target=”_blank”, aquí tienes una fácil solución.

Debes copiar la función en el archivo functions.php de tu tema.

function autoblank($text) {
	$return = str_replace('<a', '<a target="_blank"', $text);
	return $return;
}
add_filter('the_content', 'autoblank');

Eliminar el salto del “Leer más”

En WordPress, cuando hacemos clic en el enlace de “Leer más”, automáticamente nos lleva al punto siguiente de dicho Leer más en la página del contenido. Si no te ha llegado a convencer nunca ese salto, simplemente pega el siguiente código en tu archivo functions.php para deshacerte de él.

function wdc_no_more_jumping($post) {
     return '<a href="'.get_permalink($post->ID).'" class="read-more">'.'Continue Reading'.'</a>';
}
add_filter('excerpt_more', 'wdc_no_more_jumping');

Mostrar mensajes en el área de administración de WordPress

A la hora de desarrollar temas o plugins para WordPress, hay ocasiones en las que debes informar a los usuarios que deben realizar tareas importantes, como por ejemplo actualizar WordPress. De los action hooks que te mostramos hoy, este te servirá para mostrar mensajes personalizados a los administradores.

function showMessage($message, $errormsg = false){
	if ($errormsg) {
		echo '<div id="message" class="error">';
	} else {
		echo '<div id="message" class="updated fade">';
	}

	echo "<p><strong>$message</strong></p></div>";
}  

function showAdminMessages() {
    showMessage("Debes actualizar WordPress lo antes posible...", true);

    if (user_can('manage_options') {
       showMessage("Hello administradores");
    }
}

add_action('admin_notices', 'showAdminMessages');

Reemplazar palabras automáticamente en tus posts

Imaginemos esto: tu blog antiguamente se llamaba “miblog” y por razones que no nos conciernen, los rebautizado como “misuperblog”. Reemplazar cada uno de tus posts en donde nombres tu blog puede convertirse en una tarea titánica si tu web ya lleva mucho tiempo online y cuenta con cierto número de posts publicados. En vez de eso, puedes pegar este hook en tu fichero functions.php y dejar que haga el trabajo por ti.

function replace_text_wps($text){
    $replace = array(
        // 'PALABRA A REEMPLAZAR' => 'REEMPLAZO'
        'WPDirecto' => '<a href="http://wpdirecto.com">WPDirecto</a>',
        'WordPress Directo' => '<a href="http://wpdirecto.com">WordPress Directo</a>',
        'WP Directo' => '<a href="http://wpdirecto.com">WP Directo</a>'
    );
    $text = str_replace(array_keys($replace), $replace, $text);
    return $text;
}

add_filter('the_content', 'replace_text_wps');
add_filter('the_excerpt', 'replace_text_wps');

Poner la web en modo mantenimiento

Hay veces que necesitas poner tu sitio web en espera mientras realizas alguna tarea de mantenimiento. Existen muchos plugins que te permiten hacerlo, pero mediante el uso de action hooks es extremadamente sencillo: simplemente pega el siguiente código en tu archivo functions.php y guárdalo. Una vez hecho esto, tu web no estará operativa para nadie, excepto para los administradores. No te olvides de eliminar el código una vez termines con las tareas.

function cwc_maintenance_mode() {
    if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {
        wp_die('Estamos realizando tareas de mantenimiento. Vuelve en unos minutos.');
    }
}
add_action('get_header', 'cwc_maintenance_mode');

Eliminar el campo URL del formulario de comentarios

El sistema de comentarios que viene por defecto en WordPress suele recibir un montón de spam. Si sueles lidiar día sí, día también con este problema en tu web, el siguiente filtro puede ayudarte a combatir el spam de una vez por todas.

function remove_comment_fields($fields) {
    unset($fields['url']);
    return $fields;
}
add_filter('comment_form_default_fields','remove_comment_fields');

Eliminar el autolink de los comentarios

Si alguien deja un comentario que contiene una URL en tu sitio web desarrollado con WordPress, WordPress convertirá la URL automáticamente en un enlace. Esto puede resultar útil, pero a mi, personalmente, no me gusta mucho eso de ver enlaces en los comentarios, y más si son de spam.

Eliminar el autolink es muy sencillo, solo tienes que pegar el siguiente código en el archivo functions.php de tu tena. Una vez guardado el fichero con los cambios, verás como desaparecen los enlaces autogenerados en tus comentarios.

remove_filter('comment_text', 'make_clickable', 9);

Y hasta aquí nuestro artículo sobre ejemplos prácticos de actions hooks y filtros. Espero que te haya gustado y, si te ha resultado útil, no dudes en compartirlo en redes sociales. El icono de la imagen destacada es obra de Alex Fuller. ¡Nos leemos!

Dejar respuesta

Please enter your comment!
Please enter your name here