Как проверить версию другого плагина, а затем добавить в него страницу подменю

Я пишу плагин, который требует другого плагина. Поэтому сначала нужно проверить, существует ли другой плагин в правильной версии.

Если да, я хочу добавить страницу подменю на страницу плагина, но здесь мой код, похоже, не работает.

Я думаю, проблема в том, что я могу проверить наличие других плагинов с поздним крюком (admin_init). Но для добавления подменю я должен использовать ранний крючок (admin_menu). Как это решить?

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

Ладно, я понял. Решение заключается в использовании более раннего крючка для проверки плагинов. Но тогда функция get_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();