Acciones y filtros de WordPress ¿Cuál es la diferencia?

Los ganchos de acción y filtro son una parte fundamental de las diversas API de WordPress. Sin ellos, está limitado en cuanto a lo que puede hacer en sus temas y (especialmente) sus complementos.

Pero a veces puede ser fácil confundir los dos, especialmente en los casos en que WordPress tiene un gancho de acción y un gancho de filtro con el mismo nombre..

En este artículo definiré los ganchos de acción y filtro y describiré la diferencia entre ellos, y demostraré cómo usarlos en tus temas y complementos. También daré algunos ejemplos de cuándo podrías usar cada.

Cuando agrega acciones y filtros a su código (o está enlazando funciones a ellos), ayuda a comprender cómo WordPress llama a las acciones y los filtros y qué sucede en qué orden. No lo cubriré en detalle aquí ya que tenemos otro tutorial que hace ese trabajo.

Definiciones y diferencias

Vamos a empezar con algunas definiciones. Definiré la acción y también filtraré los ganchos y las funciones para que pueda ver la diferencia entre todos..

Funciones

Las funciones son lo primero con lo que trabaja la mayoría de las personas cuando están aprendiendo el desarrollo de WordPress; Si has añadido código a tu tema funciones.php archivo, entonces habrás escrito una función.

Las funciones especifican cómo sucederá algo. Usted codifica una función para consultar datos, para generar contenido o para realizar muchas otras tareas. Puede llamar (ejecutar) funciones directamente en los archivos de plantilla de su tema, o puede engancharlos a la acción o filtrar los enlaces. Las funciones también pueden incluir etiquetas de plantilla, como etiquetas condicionales, para especificar cuándo se debe aplicar la función.

Te mostraré las diferentes formas de ejecutar funciones más adelante en este artículo..

Ganchos de acción

Los ganchos de acción (o acciones) se activan cuando ocurre algo, como cargar una página, el inicio de sesión de un usuario o una acción personalizada que defina en su tema o complemento..

Puedes agregar tus propios ganchos de acción usando el acción_ () Función, que voy a demostrar en breve. Cualquier función que enganche a esa acción se ejecutará en ese punto en el código.

Ganchos de filtro

Los ganchos de filtro, o filtros, controlan cómo sucede algo o cambian algo que ya se está emitiendo. Podría usar un filtro para generar metadatos en un formato específico, para anular la salida de texto de su complemento o para evitar que se muestre algo..

Usted agrega filtros en su código usando la apply_filters () Función, que voy a demostrar en breve. Como la palabra 'aplicar' indica, usted aplica filtros al código existente, mientras que una acción que crea usando acción_ () está vacío hasta que le enganches funciones.

Uso de funciones, acciones y filtros

Veamos algunos ejemplos que muestran cómo usa cada una de las funciones, acciones y filtros. Primero, analizaremos el uso de funciones directamente en su código sin adjuntarlas a un gancho.

Llamando funciones directamente

Aquí hay un ejemplo de una función que se llama directamente en un archivo de plantilla. En los sitios de mis clientes, agrego un colofón en el pie de página, que incluye información de derechos de autor. Aquí está la función:

if (! function_exists ('compass_colophon')) function compass_colophon () ?> 
"title =""rel =" home "> Desarrollado por WordPress y diseñado por Compass Design.

Esta función es conectable como la uso en un tema principal; Si luego creo una nueva función con el mismo nombre en mi tema secundario, esta función se anulará. Tenga en cuenta que la función incluye otra función, compás_colofon (), llamándolo directamente en el código.

Esta función está en el funciones.php archivo de mi tema principal. Puedo llamarlo directamente en el footer.php archivo de mi tema, como asi:

compás_colofon ();

Esto genera el código en la función en el punto de mi tema donde lo llamo. También puede pasar parámetros a sus funciones, que luego se usan dentro de la función.

Como demostraré en breve, esta función también podría estar conectada a una acción o un filtro..

Enganchar funciones a acciones

En lugar de llamar directamente a esa función de colofón, tendré más flexibilidad si la conecto a un gancho.

Creación de ganchos de acción

En lugar de llamar al compás_colofon () función en mi archivo de pie de página, puedo agregar un gancho de acción en ese punto en el footer.php archivo, añadiendo esto:

do_action ('compass_in_footer');

los acción_ () La función tiene un parámetro obligatorio, que es el nombre de la acción. Opcionalmente también puedes agregarle argumentos..

Enganchar funciones a acciones

Así que ahora, en lugar de llamar a mi función de colofón, necesito conectarlo a mi nuevo gancho de acción. En mi funciones.php archivo, agrego esto con mi función:

add_action ('compass_in_footer', 'compass_colophon');

Esto engancha mi función a la compás en pie de página acción, lo que significa que el código dentro de mi función se ejecutará en el punto del código donde se colocó la acción. El primer parámetro es el nombre del gancho de acción, y el segundo es el nombre de mi función.

Una ventaja de hacerlo de esta manera es que puede enganchar más de una función a la misma acción, y puede establecer la prioridad para que se activen en el orden que desee..

Así que digamos que tengo otra función que quiero conectar a mi compás en pie de página gancho, llamado compass_smallprint (), que contiene algo más de letra pequeña:

if (! function_exists (compass_smallprint ())) function compass_smallprint () // contenidos de la función aquí add_action ('compass_in_footer', 'compass_smallprint', 20);

Puedes ver aquí que he agregado un tercer parámetro a mi add_action () La función, que es la prioridad. La prioridad por defecto es 10, que se aplicará si deja esto en blanco. Así que porque no he establecido una prioridad para mi compás_colofon () función, ajuste 20 para el compass_smallprint () la función hará que esa función se ejecute después la compás_colofon () función.

Desenganchar funciones de acciones

A veces desea detener la ejecución de una función y no puede anularla porque no es conectable. Si la función se ha enganchado a un gancho de acción, puede hacer esto usando el remove_action () función.

Así que si quiero evitar mi compass_smallprint () función de correr, lo desengancho de la compás en pie de página acción así

remove_action ('compass_in_footer', 'compass_smallprint', 20);

los remove_action () la función tiene tres parámetros: el nombre del gancho de acción, el nombre de la función y la prioridad con la que la función se enganchó originalmente a la acción. Debes incluir la prioridad para que esto funcione..

También puede desconectar todas las funciones de una acción si desea evitar que se ejecuten todas. Tenga cuidado al hacer esto, ya que puede haber funciones que no conoce enganchadas a su acción.

Para hacer esto, use el remove_all_actions () función:

remove_all_actions ('compass_in_footer');

Agregar un número de prioridad como el segundo parámetro solo elimina las funciones que están enganchadas a ese enlace de acción con la prioridad que ha especificado, lo que le da más control.

Funciones de enganche a los filtros

También tiene la opción de conectar sus funciones para filtrar los ganchos. Haz esto cuando quieras alterar o anular algún código existente. Cuando creas el gancho de filtro (usando el apply_filters () función), envuelve ese código alrededor de su tema o plugin, que luego es alterado por cualquier filtro adjunto al gancho.

Esto puede ser útil si tiene opciones de tema o complemento que desea anular una configuración predeterminada, o si está creando un tema principal que puede tener elementos reemplazados por un tema secundario.

Creación de ganchos de filtro

los apply_filters () La función tiene tres parámetros: el nombre del enganche del filtro, el valor que desea filtrar (es decir, el valor predeterminado) y las variables opcionales que luego pasa a las funciones enganchadas al filtro..

Puede agregar un filtro en sus archivos de plantilla de tema o dentro de una función que está enganchada a través de un gancho de acción. Echemos un vistazo a ambas opciones..

Volviendo a mi compás_colofon () función, lo convierto en un filtro agregando su contenido a mi footer.php archivo dentro de la apply_filters () funciona como tal:

echo apply_filters ('compass_colophon', ' 
"title =""rel =" home "> Desarrollado por WordPress y diseñado por Compass Design.
');

Esto genera el código que he establecido como el segundo parámetro de mi apply_filters () función.

Sin embargo, prefiero no agregar esto directamente a mi archivo de plantilla de tema, así que agregaré el filtro a la función que ya estoy adjuntando a través de un gancho de acción.

Así que agrego el compás en pie de página acción a mi footer.php archivo usando el acción_ () funciona como se demostró anteriormente, y luego creo una función en mi funciones.php archivo que está enganchado a esa acción y contiene un filtro:

if (! function_exists ('compass_colophon')) function compass_colophon () echo apply_filters ('compass_colophon_filter', ' 
"title =""rel =" home "> Desarrollado por WordPress y diseñado por Compass Design.
'); add_action ('compass_in_footer', 'compass_colophon');

Esto significa que ahora puedo anular el contenido predeterminado de una de las tres formas siguientes:

  • creando una nueva función llamada compás_colofon () en el tema de mi hijo, que anula la función en mi tema principal, ya que es conectable
  • desenganchando el compás_colofon () función de la compás en pie de página Gancho de acción y escritura de una nueva función que le coloco en su lugar.
  • Al crear una nueva función que luego engancho a la compás_colophon_filter filtro de gancho, que anula el valor en mi apply_filters () función

En la vida real, no necesitarías tener tantas opciones, por lo que es más probable que apliques filtros a parte del contenido de tu función en lugar de todo..

Así que podría crear dos filtros, uno para la sección de derechos de autor y otro para los créditos:

if (! function_exists ('compass_colophon')) function compass_colophon () echo '
'; echo apply_filters ('compass_copyright_filter', ' "title =""rel =" home "> '); echo apply_filters ('compass_copyright_filter', ' Desarrollado por WordPress y diseñado por Compass Design. '); eco '
'; add_action ('compass_in_footer', 'compass_colophon');

Entonces podría anular la totalidad de mi función compass_colophon desenganchándola o escribiendo una nueva en el tema de mi hijo, o podría crear una función conectada a la compás_copyright_filter o compás_creditos_filtros Filtro de gancho, para anular cada elemento individualmente..

Funciones de enganche a los filtros

Para enganchar una función a un gancho de filtro, use la Añadir filtro() Función, que tiene dos parámetros: el nombre del gancho y el nombre de la función.

Así que para cambiar los créditos, escribiría esta función:

función new_credits () ?>  Desarrollado por WordPress y diseñado por Rachel McCollin.   

Esto anula el valor establecido en mi original compás_creditos_filtros filtro de gancho con el contenido de mi nuevos_créditos () función, pero mantiene todo lo demás en el compás_colofon () funciona igual.

También puede especificar prioridades al enlazar funciones a filtros, exactamente de la misma manera que con los ganchos de acción. Las funciones con una prioridad más baja se ejecutarán primero.

Desenganchar funciones de los filtros

Al igual que con los ganchos de acción, también puede eliminar funciones de los ganchos de filtro. Para ello, utilice la función remove_filter (), que tiene tres parámetros: el nombre del enlace del filtro, el nombre de la función y la prioridad, que es obligatoria si se estableció una prioridad cuando la función se enganchó originalmente al filtro.

Así que para quitar mi nuevos_créditos () función, yo uso esto:

remove_filter ('compass_credits_filter', 'new_credits');

La salida del código luego volvería al valor que especifiqué en mi original apply_filters () función. Así que si quisiera quitar el nuevos_créditos () En función de que no aparezca nada en su lugar, tendría que agregar una nueva función. Luego desengancho la primera función y engancho mi nueva función de esta manera:

función no_credits () return;  remove_filter ('compass_credits_filter', 'new_credits'); add_filter ('compass_credits_filter', 'no_credits');

Resumen

Comprender la diferencia entre la acción y los ganchos de filtro y ser capaz de usarlos de manera efectiva le dará un impulso a su desarrollo de tema y plugin. De hecho, sin usar enganches de al menos un tipo, no se pueden escribir complementos, ya que la única forma en que se activa el código de sus complementos es a través de los enganches de acción y filtro a los que se adjunta..

Esta guía le mostró cómo agregar la misma funcionalidad usando una función, un gancho de acción y uno o más ganchos de filtro, junto con técnicas para eliminar funciones de los ganchos y consejos sobre cuándo es más útil cada técnica..

Además de enganchar las funciones a su propia acción y los enganches de filtro que crea, puede engancharlas a las acciones y filtros que proporciona WordPress, como el wp_head acción o la body_class filtrar.