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

¿Por qué falla Bizum en WooCommerce? 9 causas

Por qué falla Bizum WooCommerce: detecta errores de credenciales, firma, entorno y pedidos para recuperar…

hace % días

Plugin gratuito Redsys WordPress: qué revisar

Elige un plugin gratuito Redsys WordPress con criterio: compatibilidad, seguridad, configuración bancaria y límites para…

hace % días

Qué necesito para activar CECA Online en mi web

¿Qué necesito para activar CECA Online? Revisa contrato bancario, datos del terminal, seguridad, pruebas y…

hace % días

Cómo elegir una pasarela para suscripciones

Aprende a elegir una pasarela para suscripciones en WordPress: revisa recurrencia, compatibilidad, seguridad y soporte…

hace % días

Plugin Bizum WordPress para cobrar con control

Elige un plugin Bizum WordPress compatible con tu flujo de venta, configura la pasarela bancaria…

hace % días

Cómo aceptar CECA en reservas de WordPress

Aprende cómo aceptar CECA en reservas WordPress, configurar pagos seguros y confirmar cada reserva sin…

hace % días