Guía para principiantes para agregar sus propios ganchos de WordPress

Guía para principiantes para agregar sus propios ganchos de WordPress

Los complementos son la forma de extender WordPress. La razón por la que es tan fácil hacer que WordPress haga una oferta está relacionada con los ganchos que están esparcidos en el código fuente.

¿Quiere hacer algo tan pronto como se publique un artículo? ¿Quiere cambiar la longitud del fragmento? ¿Quiere crear sus propias estadísticas de visitas a la página? Encontrar el gancho adecuado es todo lo que tiene que hacer.

Pero, ¿qué pasa con hacer lo mismo con los complementos? Los ganchos no solo están diseñados para usarse en WordPress, son básicamente una plantilla de diseño que puede implementar en su propio trabajo.

En este artículo, le mostraré cómo puede hacer sus propios ganchos para que usted u otros puedan beneficiarse de su trabajo.

Por que necesitamos ganchos

Para mostrarte lo increíbles que pueden ser los ganchos, veamos un ejemplo del mundo real: Campos personalizados avanzados. Este complemento le permite agregar campos de datos personalizados flexibles a las publicaciones; estamos hablando de mapas de Google, campos numéricos, opción múltiple y más.

Todo esto se hace a través de una interfaz de usuario genial, todo lo que tienes que hacer es usar funciones como get_field() o the_field() en la parte delantera. Hasta aquí todo va bien.

Suponga que está creando una herramienta que permite a las personas vender cosas, ofreciendo un campo para el precio y otro para la moneda. Sin embargo, internamente, aún desea almacenar los precios en dólares, independientemente de la moneda que elija mostrar el usuario.

Si ACF (Campos personalizados avanzados) no tiene enlaces, esto sería difícil de hacer, es posible que deba utilizar un mecanismo fuera de ACF para registrar este campo. Afortunadamente, estamos cubiertos por acf/save_post acción. Puede utilizar esta acción para modificar $_POST datos antes de que se registren: el momento perfecto para convertir el precio a dólares.

Este es un ejemplo muy práctico de ganchos, pero hay otra razón: durabilidad y extensibilidad. Los Hooks son como una API, le dan una dirección; un marco por así decirlo. Si está registrando datos importantes, debe crear automáticamente un enlace para que otros puedan manipular los datos según sea necesario. Si está viendo algo crítico para su aplicación, como imágenes, use un filtro que permita a los usuarios establecer la cantidad de imágenes mostradas.

Cómo funcionan los ganchos internos

Para crear nuestros propios ganchos, haremos exactamente lo que WordPress hace internamente: use el do_action() y apply_filters() funciones para realizar todas las funciones enganchadas. Pasemos al código fuente de WordPress para ver cómo funciona.

WordPress usa el wp_trim_excerpt() trabajar internamente para crear un fragmento. En WordPress 4.1, esta función se define en wp-includes/formatting.php, comenzando en la línea 2542. Si se enfoca en la línea 2560, debería ver lo siguiente:

$excerpt_length = apply_filters( 'excerpt_length', 55 );

Lo que esto significa es: Ejecute cada función enlazada al excerpt_length engancha y devuelve el valor final. Digamos que está utilizando 3 complementos que cambian la longitud del fragmento, ¿qué sucede entonces? Juntemos estas funciones en un solo lugar y echemos un vistazo:

add_filter( 'excerpt_length', 'plugin_a_excerpt_modify', 20 );
plugin_a_excerpt_modify( $length ) {
    return $length - 10;
}

add_filter( 'excerpt_length', 'plugin_b_excerpt_modify', 32  );
plugin_b_excerpt_modify( $length ) {
    return 104;
}

add_filter( 'excerpt_length', 'plugin_c_excerpt_modify', 16 );
plugin_c_excerpt_modify( $length ) {
    return 20;
}

En última instancia, la longitud del fragmento será de 104 palabras. Los filtros se ejecutan por orden de prioridad. Por lo tanto, la función del complemento C se ejecuta primero. Si no se conectara ninguna otra función, la longitud ahora sería de 20 palabras. Luego, el complemento A entra en acción y la longitud se convierte en 10. Finalmente, el complemento B pesa, lo que hace que la longitud sea 104.

do_action() utiliza exactamente el mismo mecanismo, realizando todas las funciones relacionadas con el gancho definido como primer parámetro.

Tenga en cuenta que este modelo es completamente cerrado, no se basa en ninguna definición en particular. Puedes usar do_action( 'lol_hook' ) donde desee, en el peor de los casos, ninguna función está vinculada a lol_hook. En otras palabras, ¡ya tenemos la infraestructura para crear nuestros propios ganchos!

Crea nuestros propios ganchos

Como mencioné anteriormente, todo lo que tenemos que hacer es asegurarnos de usar do_action() y O add_filter y asegúrate de documentarlo. De esa forma, los programadores y los usuarios sabrán que está ahí.

Supongamos que creamos una galería de las últimas imágenes cargadas extraídas directamente de la base de datos, algo como esto:

$args = array(
    'post_type' => 'attachment',
    'post_status' => 'any',
    'orderby' => 'date',
    'order' => 'DESC',
    'posts_per_page' => 10,
    'fields' => 'ids'
);
$images = new WP_Query( $args );
$gallery = '['.'gallery ids="' . implode( ',', $images ) . '"'.']';
echo do_shortcode( $gallery );

En este ejemplo, creamos una consulta asegurándonos de que solo recuperamos las imágenes, ordenadas por fecha y limitadas a 10 resultados. Utilizando la fields parámetro Me aseguré de que se devuelva una matriz de identificadores. Luego construí un código corto de galería de WordPress regular a partir de esta información.

Puede usar dos enfoques para agregar ganchos aquí. Puede agregarlo justo antes de la definición del $args matriz, así:

$posts_per_page = apply_filters( 'my_gallery/posts_per_page', 10 );

En este caso, necesitará utilizar el $posts_per_page variable en la matriz. Quizás una mejor solución sería dejar que se editara toda la tabla. Esto permitiría que otros complementos (o usted, en el futuro) agreguen categorías, etiquetas y otras restricciones de la galería; aquí está el código completo:

$args = array(
    'post_type' => 'attachment',
    'post_status' => 'any',
    'orderby' => 'date',
    'order' => 'DESC',
    'posts_per_page' => 10,
    'fields' => 'ids'
);

$args = apply_filters( 'my_gallery/query_args', $args );

$images = new WP_Query( $args );
$gallery = '['.'gallery ids="' . implode( ',', $images ) . '"'.']';
echo do_shortcode( $gallery );

Eso es todo lo que podemos decir al respecto. Otros complementos ahora pueden usar el my_gallery/query_args gancho para modificar la funcionalidad de las galerías creadas.

Una nota sobre el nombre: la barra no es necesaria en absoluto. Puede utilizar “my_plugin_query_args” o cualquier otro formato que desee. Prefiero la barra porque indica claramente el complemento que lo crea y la funcionalidad que proporciona.

Conclusión

Los Hooks son extremadamente poderosos y pueden usarse no solo para extender WordPress, sino también para extender sus propios complementos o incluso temas. Tenga cuidado de no exagerar y agregar ganchos a todos los rincones de su aplicación.

En lugar de agregar un gancho al pedido, el estado de la publicación, el tipo de publicación y las publicaciones por página por separado, agregué un filtro que puede cambiar toda la tabla a la vez. Es posible que otros bits de datos no tengan sentido para agregar ganchos, en última instancia, depende de usted.

Buena suerte creando más aplicaciones modulares y expandibles, ¡avísanos si alguna vez has usado tus propios ganchos en algún lugar genial!

O inicie la conversación en nuestro Grupo de Facebook para profesionales de WordPress. Encuentre respuestas, comparta consejos y obtenga ayuda de otros expertos en WordPress. Únase a él ahora es gratis)!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir arriba