Hooks en WordPress

Introducción a Hooks: un componente básico de WordPress

Los hooks de WordPress son posiblemente la base del desarrollo de WordPress, formando una gran parte de la funcionalidad central y siendo utilizados por casi todos los plugins y temas disponibles hasta la fecha. El concepto de hooks también puede ser algo desalentador para los usuarios que están empezando a desarrollar para WordPress. Hoy, vamos a entrar y averiguar un poco más acerca de lo que son exactamente los hooks de WordPress y cómo pueden ayudarle en su camino hacia el estrellato de WordPress.

¿Qué son exactamente los hooks de WordPress?

Los hooks de WordPress son, básicamente, activadores que permiten a los usuarios, con breves fragmentos de código, modificar áreas de un tema o plugin de WordPress, o añadir su propio código a varias partes de WordPress sin modificar los archivos originales. Un ejemplo de esto podría ser “cuando WordPress elija qué archivo de plantilla cargar, ejecute nuestro código personalizado” o “cuando genere el contenido de cada mensaje, añada enlaces de marcadores sociales al final del contenido”. Estos ejemplos se ampliarán una vez que estemos un poco más familiarizados con los diferentes tipos de hooks .

Los hooks se pueden dividir en hooks de “Acción” y “Filtro”, el primero permite la inserción de código personalizado en varios puntos (a diferencia de los eventos en JavaScript) y el segundo permite la manipulación de varios bits de contenido (por ejemplo, el contenido de una página o una entrada de blog). Echemos un vistazo más de cerca a cada uno de ellos, ¿de acuerdo?

Hooks de acción

Los hooks de acción son puntos señalados en el código del núcleo, tema y plugin de WordPress donde es posible que los recursos externos (fuera del alcance de donde está el gancho… ya sea en el núcleo, tema o plugin) insertar código adicional y, por lo tanto, personalizar el código para hacer las funciones adicionales que deseen. Un ejemplo de esto es el gancho de acción wp_head, usado comúnmente por muchos temas y plugins para inyectar hojas de estilo CSS adicionales, código de procesamiento o cualquier otra cosa que necesiten para sentarse entre las etiquetas <head> y </head> de la estructura XHTML de su tema de WordPress. Esta es la razón para incluir wp_head(); en todos los temas de WordPress.

Para engancharse a una acción, cree una función en el archivo functions.php de su tema (o en el código de su plugin) y engancharlo usando la función add_action(), de la siguiente manera:

<?php
	add_action( 'wp_head', 'wp_actionhook_ejemplo' );

	function wp_actionhook_ejemplo () {

	echo '<meta name="description" content="Esta es la meta descripción de esta página.!" />' . "
";

} // fin wp_actionhook_ejemplo()
?>

El código anterior añade el texto “Esta es la meta descripción de esta página.! Colocando “wp_head” en la llamada para add_action() con “get_header” mostraría este texto encima de su tema.

Hooks de Filtros

Los hooks de filtro se utilizan para manipular la salida. Un ejemplo de esto sería añadir una línea o texto (o un hipervínculo, o una firma de despedida, lo que quieras) al final del contenido de cada una de las entradas de tu blog. Los ganchos de filtro también se pueden utilizar para truncar texto, cambiar el formato del contenido o casi cualquier otro requisito de manipulación de programación (por ejemplo, añadir o anular una serie de valores).

El código personalizado se añade como un filtro usando la función add_filter(). El siguiente código añade un cierre de sesión al final de cada entrada del blog, sólo cuando se ve la pantalla completa de la entrada del blog:

<?php
	add_filter( 'the_content', 'wpcandy_filterhook_signoff' );

	function wpcandy_filterhook_signoff ( $content ) {

		if ( is_single() ) {

			$content .= '<div class="sign-off">Th-th-th-th-th That\'s all, folks!</div>' . "
";

		} // End IF Statement

	return $content;

} // fin wpcandy_filterhook_signoff()
?>

El código anterior añade una nueva etiqueta div al final del contenido de nuestra entrada de blog, sólo cuando está en una sola pantalla de entrada de blog.

Un hooks de filtro es como usar la función str_replace() en PHP. Usted le da algunos datos, manipula, reemplaza o reformatea los datos y devuelve el nuevo contenido al final.

…y ahora, para algunas preguntas comunes….contestadas.

¿Los hooks personalizados sólo están disponibles para el tema o los plugins que tengo activados?

Los hooks y filtros personalizados que son añadidos por un tema o plugin, sólo se aplican si ese tema o plugin está activo. Hay muchos ganchos, sin embargo, que son globales (get_header, wp_head y wp_footer son tres ejemplos). Si quieres cambiar de tema regularmente y mantener las funciones que has enganchado a estos u otros hooks o filtros globales, te recomiendo que los escribas en un plugin.

Los temas y los plugins pueden especificar filtros y acciones personalizados. Hablaremos más de esto en otra entrada.

¿Dónde puedo obtener más información sobre los hooks de acción y de filtro?

Mi recurso favorito es, sin duda, el Codex WordPress. Aunque hay muchos tutoriales disponibles en línea sobre aplicaciones de filtros y ganchos de acción. El Codex proporciona ejemplos útiles, así como explicaciones actualizadas e informativas, que ayudan a obtener una comprensión general de la API de plugins (la API que maneja los hooks de acción y de filtro).

Ganchos de acción: http://codex.wordpress.org/Plugin_API#Actions
Ganchos de filtro: http://codex.wordpress.org/Plugin_API#Filters

Y para más información sobre el tema, el resto de la página de la API de plugins también está disponible: http://codex.wordpress.org/Plugin_API#Hooks.2C_Actions_and_Filters.

Ahora que he respondido a algunas preguntas, vamos a mostrar algunos ejemplos prácticos que se pueden usar de inmediato con cualquier tema de WordPress.

Añade  “time ago”  visualización de la hora al final de cada mensaje.

<?php

	add_filter( 'the_content', 'wpcandy_time_ago' );

	function wpcandy_time_ago ( $content ) {

	$content .= "
" . __( 'Posted ', 'wpcandy' ) . human_time_diff( get_the_time('U'), current_time('timestamp') ) . __( ' ago', 'wpcandy' );

	return $content;

} // Fin wpcandy_time_ago()
?>

Utilice etiquetas condicionales de WordPress para detectar el navegador web del usuario y añadir una clase con su nombre a la etiqueta de cuerpo.

<?php

	add_filter('body_class','browser_body_class');
	function browser_body_class($classes) {
	
	global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;

	if($is_lynx) $classes[] = 'lynx';
	elseif($is_gecko) $classes[] = 'gecko';
	elseif($is_opera) $classes[] = 'opera';
	elseif($is_NS4) $classes[] = 'ns4';
	elseif($is_safari) $classes[] = 'safari';
	elseif($is_chrome) $classes[] = 'chrome';
	elseif($is_IE) $classes[] = 'ie';
	else $classes[] = 'unknown';

	if($is_iphone) $classes[] = 'iphone';
		return $classes;
	}
	
?>

Quitar la barra de administración de WordPress 3.1.

	<?php add_filter( 'show_admin_bar', '__return_false' ); ?>

Por favor, comparte tus experiencias con el uso de la acción de WordPress y los hooks de filtro en los comentarios de abajo. ¡Muchas gracias!

5 (100%) 1 vote

Deja un comentario