Programación

Crear dependencias entre plugins en WordPress

En el software es muy normal que existan dependencias entre componentes. Un programa necesita de una librería, un paquete en Linux necesita de otro o en WordPress, un plugin necesita que otro esté instalado y activado para funcionar. Ese es el caso de nuestro plugin para RedSys y WooCommerce, que obviamente necesita WooCommerce instalado y activado. o nuestro plugin para recibir pagos con Contact Form 7 (con RedSys o Ceca) que necesitan en este caso a CF7.

Este problema viene de lejos y existen diferentes enfoques para resolverlo, pero hace poco el core de WordPress introdujo una directiva que hizo que todo se facilitara. Pero vamos a presentaros tres opciones.

Chequear tú mismo y desactivar o mostrar un mensaje de error

Básicamente se trata de hacer algo así:

function cod_chequear_woo() {
    if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
        add_action( 'admin_notices', 'cod_mostrar_error' );
        deactivate_plugins( plugin_basename( __FILE__ ) );
    }
}
add_action( 'plugins_loaded', 'cod_chequear_woo' );

function cod_mostrar_error() {
    echo '<div class="notice notice-error"><p><strong>¡Error!</strong> Este plugin requiere WooCommerce. Por favor, instálalo y actívalo.</p></div>';
}

Una variante de esa opción es hacer algo parecido, no llegar a desactivar el plugin y mostrar mensajes de error diciendo que se necesita el otro plugin. El problema es que si tu plugin hace uso de clases del otro plugin por ejemplo, podrías llegar a tener errores.

Usar una librería especializada

En su momento usé TGM Plugin Activation pero en 2016 dejó de desarrollarse y ayer mismo la eliminé de uno de mis plugins. Básicamente gestionaba la lógica de la dependencia y te facilitaba la instalación del plugin del que se depende.

No lo recomiendo por obsoleto y porque la siguiente opción es la mejor sin dudas.

Usar el encabezado Requires

Salió a la luz en WordPress 6.5 y además de sencillo es potente, nativo, se integra con la interfaz de los plugins (a la hora de instalarlos o gestionarlos) y encima tiene funcionalidades avanzadas como la detección de dependencias circulares para evitarlas (que un plugin A dependa de uno B, que este dependa de uno C y que este C dependa del y así se queda hecho un bloqueo).

¿Cómo funciona? Tan sencillo como añadir en la cabecera del plugin, en su archivo principal junto al resto de directivas de los plugins que se ponen al principio entre comentarios.

/*
Plugin Name: Mi Plugin
Requires Plugins: woocommerce
*/

Unos apuntes interesantes:

  • Se puede poner más de un plugin separado por comas
  • Se añade solo el slug del plugin, nada de poner el típico formato que usaríamos en otras funciones de la API con el directorio y el fichero principal del plugin (estilo woocommerce/woocommerce.php)
Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Francisco Javier Carazo Gil

Entradas recientes

RedSys para Contact Form 7 ahora muestra el justificante y el motivo del rechazo en la página de gracias

Ya está disponible la versión 2.2 de Contact Form 7 – Integración con RedSys, y…

hace % días

¿Qué aporta la integración de Bizum y métodos similares en el proceso de pago?

El comercio electrónico español, que se encuentra en pleno crecimiento y transformación, vive actualmente un…

hace % días

Pagos recurrentes en Contact Form 7: suscripciones con RedSys, paso a paso

Hasta ahora, la integración de Contact Form 7 con RedSys solo sabía cobrar pagos únicos:…

hace % días

Cuotas personalizadas con RedSys

El pago fraccionado de RedSys para WooCommerce lleva un tiempo permitiendo dividir el precio de…

hace % días

Contact Form 7 – Integración con RedSys ya habla catalán, gallego y euskera

Ya está disponible la versión 1.24 de Contact Form 7 - Integración con RedSys, y…

hace % días

Calendario de pagos a medida en WooCommerce Subscriptions: cobra en las fechas que tú decidas

Hasta ahora, cobrar una suscripción en WooCommerce significaba aceptar una regla muy simple: eliges un…

hace % días