如何检查另一个插件的版本,然后向其添加子菜单页面

时间:2014-07-11 作者:Philipp Kühn

我正在编写一个需要另一个插件的插件。因此,我必须首先检查其他插件的版本是否正确。

如果是,我想在插件页面中添加一个子菜单页面,但这里的代码似乎不起作用。

我认为问题是,我只能用延迟挂钩(admin\\u init)检查其他插件的存在。但要添加子菜单,我必须使用早期的挂钩(admin\\u菜单)。如何解决这个问题?

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 个回复
最合适的回答,由SO网友:Philipp Kühn 整理而成

好的,我知道了。解决方案是使用早期的钩子来检查插件。但是函数get\\u plugins()不可用,因此我必须将其包括在内以供使用。工作代码:

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();

结束

相关推荐

Content hooks vs User hooks

这与其说是一个有直接答案的问题,不如说是一个理论问题。我一直在处理更新或删除帖子以及更新或删除用户时启动功能的不同操作。对于行动,publish_post 和before_delete_post 对于职位和personal_options_update, edit_user_profile_update 和delete_user 对于用户。通过更新后,您可以访问当前设置的值,同时访问新值,以便在发生任何事情之前进行您认为合适的任何更改。使用用户更新,您只能在设置新信息后才能访问新信息。Is there a