Como crear un nuevo hook en WordPress
Todo desarrollador de plantillas debe saber que los temas de WordPress se estructuran en posiciones, ganchos o hooks.
En WordPress hay dos tipos de hooks: acciones y/o filtros. En este artículo solamente vamos a hablar de las acciones, ya que son generalmente más simples, pero todas sus lecciones se pueden aplicar a los filtros sin mucha dificultad.
Los ganchos o hooks son funciones, un buen ejemplo es wp_head(). Esta función está definida en wp-includes/general-template.php y las plantillas de WordPress lo utilizan principalmente para añadir scripts y hojas de estilo en la cabecera.
Su implementación es muy sencilla:
function wp_head() {
do_action('wp_head');
}
La función do_action hace el trabajo duro, añadiendo la función wp_head en el sistema de ganchos de WordPress.
Si quieres ir más allá, siempre puedes añadir tus propios hooks para hacer más personalizable y flexible tu plantilla. Es increíblemente sencillo añadir nuevos ganchos de la misma manera.
En el ejemplo vamos a añadir una nueva posición por encima del footer de nuestra página.
Hay tres pasos para añadir un gancho a medida en un tema.
En primer lugar, agrega la función de enlace en el functions.php de tu plantilla:
function pre_footer() {
do_action('pre_footer');
}
En segundo lugar, agrega la acción a tu tema en el lugar donde desea que se ejecute. En nuestro caso, agregaremos lo siguiente en el footer.php en el lugar que corresponda:
<?php pre_footer(); ?>
Finalmente podemos añadir acciones a nuestro nuevo gancho de la siguiente forma en el functions.php:
function output_text() {
echo '<p>Your text.</p>';
}
add_action('pre_footer','output_text', 5);
Ahora en el tema aparecerá un párrafo con el texto «Your text» antes del pie de página.
Hola,
Después de crear el HOOK y validarlo, intento comprobar si existe con
*if ( function_exists(‘funcion_creada’) )*
pero no consigo que me la de por creada (aunqué si que puedo acceder con *add_action (‘funcion_creada’, ‘loquesea’)* ), cosa que con la función wp_head() *if ( function_exists(‘wp_head’) )* si me devuelve que existe.
A qué se puede deber?
Como puedo comprobar si la funcion creada existe?
Muchas gracias y felicidades por un blog estupendo
Hola buenas tardes,
Quizás estás revisando si existe antes de que se declare en el functions.php del tema. Puede ser?
Saludos
Hola,
Ya lo pensé, pero el hook lo tengo definido en las primeras líneas del functions.php del tema (con after_setup_theme, aunqué también lo declaré fuera de esta función) y quiero comprobarlo des del functions.php del plugin.
El problema con el que me encuentro es como si el functions del plugin me lo cargara antes del functions del tema, pero sólo al comprobar si existe, no para escribir en el hook (que sí lo hace).
Supongo que debe ser algo muy básico que se me escapa, pero no sé el qué :/
Muchas gracias por tu tiempo.
Gracias, es justo lo que necesitaba, muy bien explicado