web-dev-qa-db-fra.com

Comment vérifier la version d'un autre plugin et y ajouter une page de sous-menu

j'écris un plugin qui nécessite un autre plugin. Donc, je dois d'abord vérifier si l'autre plugin existe dans une version correcte.

Si oui, je veux ajouter une page de sous-menu à la page du plugin mais ici mon code ne semble pas fonctionner.

Je pense que le problème est que je ne peux que vérifier l'existence d'autres plugins avec un hook tardif (admin_init). Mais pour ajouter des sous-menus, je dois utiliser un hook antérieur (admin_menu). Comment résoudre ça?

class acf_multisite_sync {

    function __construct() {

        add_action('admin_init', array($this, 'acf_sync_init'));

    }

    function acf_sync_init() {

        $plugins = get_plugins();

        if (isset($plugins['advanced-custom-fields-pro/acf.php'])) {

            if ($plugins['advanced-custom-fields-pro/acf.php']['Version'] >= 5 
                && is_plugin_active('advanced-custom-fields-pro/acf.php')
                && is_main_site()) {

                add_action('admin_menu', array($this, 'acf_sync_submenu'));

            }

        }

    }

    function acf_sync_submenu() {

        add_submenu_page(
            'edit.php?post_type=acf-field-group', 
            'Multisite', 
            'Multisite', 
            'manage_options', 
            'acf-sync', 
            array($this, 'acf_sync_callback')
        );

    }

    function acf_sync_callback() {

        echo 'My Submenu Content';

    }

}

new acf_multisite_sync();
1
Philipp Kühn

OK j'ai compris. La solution consiste à utiliser un hook antérieur pour vérifier les plugins. Mais alors la fonction get_plugins () n'est pas disponible, donc je dois l'inclure pour l'utiliser. Le code de travail:

class acf_multisite_sync {

    function __construct() {

        add_action('plugins_loaded', array($this, 'acf_sync_init'));

    }

    function acf_sync_init() {

        if (!function_exists('get_plugins')) {
            require_once ABSPATH . 'wp-admin/includes/plugin.php';
        }

        $plugins = get_plugins();

        if (isset($plugins['advanced-custom-fields-pro/acf.php'])) {

            if ($plugins['advanced-custom-fields-pro/acf.php']['Version'] >= 5 
                && is_plugin_active('advanced-custom-fields-pro/acf.php')
                && is_main_site()) {

                add_action('admin_menu', array($this, 'acf_sync_submenu'), 100);

            }

        }

    }

    function acf_sync_submenu() {

        add_submenu_page(
            'edit.php?post_type=acf-field-group', 
            'Multisite', 
            'Multisite', 
            'manage_options', 
            'acf-sync', 
            array($this, 'acf_sync_callback')
        );

    }

    function acf_sync_callback() {

        echo 'My Submenu Content';

    }

}

new acf_multisite_sync();
0
Philipp Kühn