El título de esta entrada puede parecer un poco configuro pero ahora mismo os aclaro el asunto sin mucha explicación.

Tomemos como ejemplo el plugin WooCommerce.

Sabemos que WooCommerce es un plugin para crear y gestionar tiendas online y otros tipo de ecommerce en WordPress. Pues bien, también sabremos que existen un montón de plugins o extensiones que añaden o modifican la funcionalidades o comportamiento por defecto de WooCommerce.

Pues bien, es lógico que tengamos que implementar algo en el plugin hijo o extensión para que no se active si no se active la extensión o plugin hijo si no está activo el plugin padre que en este caso es WooCommerce.

Pues bien, es lo que voy a comentar hoy.

Pongamos que tenemos un plugin con el nombre: «Super Mega Plugin«. Este será el plugin padre, similar a WooCommerce.

Ahora vamos a crear un plugin o extensión para añadir funcionalidades a este «Super Mega Plugin» y como he dicho antes no tiene sentido activar la extensión si no está activo el tema padre o mega plugin porque tendremos un montón de errores y avisos.

Lo que vamos a hacer es utilizar register_activation_hook() para que ejecute una función que comprobará si está activado el tema padre y en caso negativo, que pare as máquinas y no active esta extensión.

<?php
/*
Plugin Name: Plugin Hijo
Description: Plugin hijo del plugin "Super Mega Plugin".
Version: 1.0.0
*/

register_activation_hook( __FILE__, 'comprobar_tema_padre_activo' );
function comprobar_tema_padre_activo(){

    if ( ! is_plugin_active( 'super-mega-pugin/super-mega-plugin.php' ) 
        and current_user_can( 'activate_plugins' ) ) {
           // Para las máquinas y muestra un error
           wp_die('Uppsss. Este plugin necesita que esté activado el plugin 
                   "Super Mega Plugin" por lo que no se puede activar.. <br>
                    <a href="' . admin_url( 'plugins.php' ) . '">&laquo; 
                    Volver a la página de Plugins</a>');
    }
}

Es muy sencillo y necesario cuando creamos una extensión para otro plugin como WooCommerce, EDD, etc…

Por supuesto hay otras formas de hacerlo y mucho más bonitas pero esta me parece la mejor forma puesto que evita más llamadas a la base de datos.

Espero que os sirva de ayuda.

Saludos y hasta la próxima!

 

Autor: Oscar Abad Folgueira

Programador y desarrollador WordPress.