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)

