From what I read on the Internet, admin_init fires before admin_menu, is that true?
I made a plugin template to test this and find that it is not.
Below is the test code. The output that I get when the plugin is activated is ...
2 pt\singelton Object ( [page] => pt [page_title] => Page Title [menu_title] => Menu Title [capability] => manage_options )
Pay attention to number 2 in the output above, it is derived from the admin_menu () function.
/* License: GPL Version: 0.01 Plugin Name: Plugin Template. Plugin URI: http://www.dyncomp.net/plugins/plugin-template/ Description: Plugin Template. Author: Dan Huckson Author URI: http://www.dyncomp.net Text Domain: pt Domain Path: /lang/ */ namespace pt; class obj { private $instance; // Activate static function activate() { $page = __NAMESPACE__; if (!($opt = get_option($page))) add_option($page, (object) array('page' => $page, 'in_date' => getdate())); else if (!isset ($opt->page) || $opt->page !== $page) wp_die('Error: Option ('.$page.') already exsits in database, the plugin can not be activated.'); } // Setup function __construct(&$instance) { $this->instance = $instance; } function admin_init() { wp_die('1</br><pre>'.print_r($this->instance, TRUE).'</pre>'); } function admin_menu() { wp_die('2<br><pre>'.print_r($this->instance, TRUE).'</pre>',2); } } class singelton { static private $instance; public static function getInstance($args) { $page = $args['page']; if (!isset(self::$instance->$page)) { self::$instance->$page = new static(); self::$instance->$page->page = $page; self::$instance->$page->page_title = $args['page_title']; self::$instance->$page->menu_title = $args['menu_title']; self::$instance->$page->capability = $args['capability']; } return self::$instance->$page; } private function __clone() {} private function __wakeup() {} protected function __construct() {} } $page = __NAMESPACE__; $instance[$page] = new obj(singelton::getInstance(array( 'page' => $page, 'page_title' => 'Page Title', 'menu_title' => 'Menu Title', 'capability' => 'manage_options', 'content_icon' => 'dashicons dashicons-editor-kitchensink' ))); add_action('admin_init', array($instance[$page], 'admin_init')); add_action('admin_menu', array($instance[$page], 'admin_menu')); register_activation_hook( __FILE__, array($instance[$page], 'activate'));
source share