Muchas veces encontramos un plugin que hace casi lo que queremos. Hoy veremos que, en algunos casos, podemos modificar ese plugin para que haga exactamente lo que buscamos sin tener que modificar su código fuente.
Para que esto sea posible el plugin original debe hacer un buen uso de los hooks («ganchos») de WordPress: acciones (código a ejecutar en momentos específicos de la ejecución de WordPress) y filtros (modificaciones de los datos antes/después de llamar a una acción). Más sobre hooks, actions y filters.
La idea básica es que podemos modificar el comportamiento del plugin a extender escribiendo nuestros propios hooks personalizados para complementar / modificar los del plugin original. Veámos esta idea en acción con un ejemplo:
Éste será nuestro plugin principal, lo que hace el plugin es crear una lista con los últimos 5 posts después del contenido del post.
extensible-plugin.php
Ver código extensible-plugin.php
Para llevar esto a cabo, el plugin principal va a implementar hooks personalizados, concretamente vamos a crear un filtro que nos permitirá modificar los parámetros de WP_Query. Fijaros que para obtener los últimos 5 posts llamamos a WP_Query con un array de argumentos $args:
$args = array( 'post_type' => 'post', 'post_status' => 'publish', 'post__not_in' => array( $id ), 'posts_per_page' => 5 );
$the_query = new WP_Query( apply_filters( 'ep_args', $args ) );
pero en lugar de añadir directamente $args a WP_Query, lo que hacemos es añadir $args como valor a nuestro hook ep_args
. Esto hace esta parte del código extensible como veremos en seguida.
También vamos a crear dos acciones para añadir contenido antes y después del contenido que imprime el plugin principal gracias a las siguientes dos acciones:
do_action( 'ep_before_list' ); do_action( 'ep_after_list' );
A continuación vamos a ver cómo podemos usar nuestros hooks personalizados desde otro plugin para modificar este comportamiento. El código del segundo plugin es:
addon-extensible-plugin.php
addon-extensible-plugin.php
Ver código addon-extensible-plugin.php
que a diferencia del plugin original va a mostrar 10 posts en lugar de 5 y va a mostrar contenido antes y después de la lista.
Filtro ep_args
Para modificar los argumentos de WP_Query conectando el filtro ep_args
del plugin principal con la función custom_ep_args
:
Dentro de la función custom_ep_args
podemos modificar todos los argumentos de WP_Query, por ejemplo $args['posts_per_page'] = 10;
.
Acción ep_before_list
Para añadir contenido antes de los resultados utilizamos la acción ep_before_list
definida por el plugin original y la enlazamos con la función custom_ep_before_list
:
Acción ep_after_list
De forma similar, para añadir contenido después de los resultados utilizamos la acción ep_after_list
y la añadimos a la función custom_ep_after_list
:

Nelio Unlocker
Pásate a WordPress manteniendo tus diseños y contenidos
Mejora hoy mismo el SEO de tu web y acelera su velocidad de carga convirtiendo tus páginas a estándares HTML, CSS y WordPress. No necesitas conocimientos técnicos y solo pagarás por aquello que necesites.
Parámetros
Para simplicar, en los ejemplos anteriores no hemos utilizado parámetros en nuestros hooks, a continuación veremos cómo añadirlos en una acción.
Creamos por ejempo una acción con 3 parámetros:
do_action( 'mi_accion', $param1, $param2, $param3 );
A continuación vemos cómo utilizarla:
add_action( 'mi_accion', 'mi_funcion', 10, 3 ); function mi_funcion( $param1, $param2, $param3 ) { … }
10 es el parámetro priority, podemos utilizarlo para organizar el orden de ejecución.
3 es el total de parámetros que acepta la acción.
Conclusión
Espero que os haya gustado el minitutorial, he utilizado ejemplos simples pero creo que os pueden servir como base para aplicarlos en vuestros futuros Plugins.
Hay que señalar que todos los conceptos de este tutorial son igualmente aplicables a Themes, es decir que podeis crear vuestros hooks personalizados en vuestros Themes también.
Deja una respuesta