Advertisement
  1. Code
  2. Creative Coding

Comprender las funciones conectables de WordPress y su uso

Scroll to top
Read Time: 8 min

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

WordPress proporciona una colección de funciones en su núcleo llamadas "pluggable functions" o funciones conectables. Como su nombre indica, podemos conectar código personalizado a estas funciones para sobreescribir y mejorar su funcionalidad de acuerdo con nuestros requisitos.

El verdadero poder de las funciones conectables viene con la capacidad de declarar funciones personalizadas y hacerlas conectables para que otros desarrolladores y diseñadores puedan aprovecharlas. Es una técnica ampliamente utilizada para extender la funcionalidad y las características de los temas hijo de WordPress.

A lo largo de este artículo vamos a explorar el concepto de funciones conectables y su utilización.


Uso de funciones conectables en el núcleo de WordPress

Las funciones conectables en el núcleo de WordPress se encuentran en el archivo pluggable.php dentro del directorio wp-includes. Puedes encontrar la lista completa de funciones conectables en Pluggable Functions en el Codex de WordPress. Primero te mostraré una lista de funciones conectables que pueden utilizarse en casi todos los sitios web de WordPress.

  • wp_logout: se utiliza para cerrar la sesión del usuario fuera del sistema. Puedes realizar tareas como eliminar variables de sesión personalizadas y registrar el tiempo de sesión del usuario en la base de datos escribiendo una función wp_logout personalizada.
  • wp_mail: es la función conectable más popular de todas. Puedes modificar esta función para utilizar una plantilla de correo electrónico especial para tus correos electrónicos o cualquier otra propiedad relacionada con el envío de correo electrónico.
  • wp_new_user_notification: se puede utilizar para personalizar el formato de correo electrónico enviado justo después de que un nuevo usuario se registre en el sistema.
  • auth_redirect: se utiliza para redirigir a un usuario a la página de inicio de sesión en el caso de que este aún no haya iniciado sesión. Puedes utilizar esta función para mostrar un mensaje al usuario que le señale que debe autenticarse para tener acceso a la página solicitada.
  • wp_password_change_notification: se utiliza para enviar un correo electrónico cuando se cambia la contraseña. Mediante esta función puedes añadir información adicional a este correo electrónico.

Veamos ahora cómo podemos conectar una función personalizada en una de las anteriores funciones. Aquí usaré wp_logout. Primero tienes que abrir el archivo pluggable.php y copiar el contenido de la función wp_logout. Después, crea una nueva función en el archivo con el mismo nombre e incluye el código. A continuación se muestra la función predeterminada para wp_logout:

Echemos ahora un vistazo a la versión reemplazada de la función wp_logout:

Puedes comprobar que en mi plugin he modificado la función wp_logout y he añadido código personalizado. Este es el proceso que debes seguir para anular una función conectable.

Lo importante en el código anterior es la línea if ( ! function_exists( 'wp_logout' ) ) {, definida en la parte superior. Esta línea hace que la función sea conectable comprobando si existe una función llamada wp_logout y carga la función personalizada. De lo contrario, cargará la función predeterminada en pluggable.php.

Es posible que te estés preguntando por qué es invocada la función en el plugin en lugar de una predeterminada, incluso cuando ambas funciones tienen el prefijo de la condición function_exists('wp_logout'). Esto se debe al orden de ejecución de acción de WordPress, algo que explicaré más adelante.

¿Es posible omitir la comprobación function_exists para las funciones personalizadas?

Sí, es posible. Pero si omites la comprobación, tendrás problemas en los dos siguientes escenarios.

  • Activación del plugin: Cuando se anula una función conectable desde dentro de un plugin sin la comprobación y se trata de activar la función, se generará un error que menciona "No se puede volver a declarar wp_logout()". Si eliminas la comprobación después de la activación, funcionará correctamente.
  • Función duplicada en otro plugin: Existe la posibilidad de que otro creador de plugins anule la misma función sin la comprobación condicional. En tales casos tendrá lugar un conflicto ya que ambas funciones tendrán el mismo nombre y, por lo tanto, generarán un error.

El riesgo aquí es que cualquier persona puede anular tu función sin tu conocimiento. Creo que siempre debes tener la comprobación condicional antes de la función para evitar conflictos.

Ahora ya sabes cómo trabajar con funciones conectables. Así que vamos a ver dónde podemos colocarlas.


Proceso de ejecución de las funciones conectables

He visto una gran cantidad de desarrolladores incluyendo funciones conectables en el archivo functions.php de un tema sin obtener los resultados que esperaban. Antes de crear funciones conectables debes tener un conocimiento adecuado del orden de ejecución de las acciones de WordPress.

Puedes encontrar el procedimiento de ejecución completo en Action Reference en el Codex de WordPress. Extraeré las acciones necesarias para mis explicaciones en la siguiente pantalla.

wordpress action execution orderwordpress action execution orderwordpress action execution order

La imagen anterior muestra el proceso general de ejecución de acciones de WordPress. Puedes variar en el tipo de funcionalidad utilizada en tu plugin y estas acciones pueden ser invocadas varias veces durante una solicitud.

Deberías ver claramente que los plugins "imprescindibles" se cargan primero, seguidos de los plugins activos y las funciones conectables. Finalmente se carga el tema. Así que según este proceso podemos sacar las siguientes conclusiones sobre la creación de funciones conectables.

  • Todas las funciones conectables personalizadas deben colocarse dentro de los plugins, ya que los plugins se cargan primero.
  • Si los plugins no contienen funciones conectables, se utilizará la función predeterminada del núcleo.
  • No deberías reemplazar las funciones conectables del núcleo en los archivos del tema, ya que los temas se cargan después de las funciones conectables. Por lo tanto, se utilizará la función predeterminada.

Ahora ya sabes dónde colocar tus funciones conectables. La siguiente pregunta será qué sucede cuando dos o más plugins anulan la misma función del núcleo. Es algo que está fuera de tu control ya que el primer plugin activado tendrá preferencia sobre el resto. Así que si se activa otro plugin antes que el tuyo, tu función conectable no será utilizada.

Puedes ver el orden del plugin activo utilizando el valor de la clave active_plugins en la tabla options de WordPress.


La importancia de las funciones conectables

La invalidación de las funciones conectables del núcleo nos permite ampliar la funcionalidad predeterminada y, por lo tanto, es de gran utilidad en ciertos escenarios. Pero el auténtico valor de las funciones conectables entra en juego cuando creas tus propias funciones conectables. Estas funciones no tendrán ninguna relación con las funciones del núcleo.

Por lo general, las nuevas funciones conectables se definen en tus temas de WordPress para ampliar su funcionalidad y permitir que los desarrolladores de temas hijos las reemplacen. Así que vamos a ver cómo podemos definir funciones conectables personalizadas.


Creación de funciones conectables personalizadas

En primer lugar tendrás que crear la función con una comprobación de existencia como hicimos con las funciones del núcleo. El código siguiente muestra una función conectable de ejemplo para el tema:

Anteriormente mencioné que no se debían crear funciones conectables en los archivos de un tema debido a la dependencia con las funciones conectables predeterminadas. En este escenario estamos creando nuevas funciones conectables y, por lo tanto, no habrá ninguna dependencia. De manera que el proceso de ejecución de las acciones no tendrá en general ningún efecto.


¿Cuándo usar funciones conectables?

Creamos temas hijo para permitir a los desarrolladores y diseñadores ampliar el diseño y las características del tema principal sin cambiar el código fuente del tema original. La forma básica de extensión puede proporcionarse duplicando el CSS del tema principal dentro del tema hijo y haciendo las personalizaciones necesarias.

Aparte de los estilos CSS, los temas pueden contener útiles funciones como shortcodes, plantillas de página y filtros personalizados para proporcionar elementos de diseño. Como desarrolladores de temas, necesitamos proporcionar las máximas capacidades a los desarrolladores de temas hijos. Podemos utilizar eficazmente funciones conectables para permitir a los desarrolladores de temas hijos modificar estas funcionalidades.

Las funciones conectables en los temas suelen ser extendidas por los desarrolladores de temas hijos. Pero los desarrolladores de plugins también pueden extender las funciones conectables dentro de sus plugins. Supongamos que has anulado la función conectable tanto en el tema hijo como en el plugin. En tales casos, las funciones del plugin tendrán prioridad sobre las funciones del tema hijo.

Así que asegúrate de convertir las funciones existentes de tu tema en funciones conectables cuando sea necesario para permitir la máxima capacidad de ampliación.


Resumen

El concepto de funciones conectables de WordPress te permite ampliar la funcionalidad de tus temas y plugins. Generalmente es preferible reemplazar las funciones conectables del núcleo de WordPress en los plugins y tus propias funciones conectables en los temas. Para evitar conflictos, asegúrate de haber entendido adecuadamente la secuencia de ejecución de las acciones de WordPress antes de crear funciones conectables.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.