Php 什么Wordpress钩子触发第一个admin\u init或admin\u菜单

Php 什么Wordpress钩子触发第一个admin\u init或admin\u菜单,php,wordpress,plugins,activation,Php,Wordpress,Plugins,Activation,从我在互联网上读到的内容来看,admin_init在admin_菜单之前启动,这是真的吗 我已经做了一个插件模板来测试这一点,发现情况并非如此 测试代码如下。激活插件时得到的输出是 2 pt\singelton Object ( [page] => pt [page_title] => Page Title [menu_title] => Menu Title [capability] => manage_options ) 注意上面输

从我在互联网上读到的内容来看,admin_init在admin_菜单之前启动,这是真的吗

我已经做了一个插件模板来测试这一点,发现情况并非如此

测试代码如下。激活插件时得到的输出是

2

pt\singelton Object
(
    [page] => pt
    [page_title] => Page Title
    [menu_title] => Menu Title
    [capability] => manage_options
)
注意上面输出中的数字2,它是函数admin_menu()的输出

/*
许可证:GPL
版本:0.01
插件名称:插件模板。
插件URI:http://www.dyncomp.net/plugins/plugin-template/
描述:插件模板。
作者:丹·哈克森
作者URI:http://www.dyncomp.net
文本域:pt
域路径:/lang/
*/
名称空间pt;
obj类{
私人案件;
//激活
静态函数激活(){
$page=\uuuuu名称空间\uuuuu;
如果(!($opt=get_选项($page)))
添加_选项($page,(object)数组('page'=>$page',in_date'=>getdate());
如果(!isset($opt->page)|$opt->page!==$page),则为else
wp_die('Error:Option('.$page.')已存在于数据库中,插件无法激活');
}
//设置
函数构造(&$instance){
$this->instance=$instance;
}
函数admin_init(){
wp_die('1
')。print_r($this->instance,TRUE)。“”); } 功能管理菜单(){ wp_die('2
')。print_r($this->instance,TRUE)。'',2); } } 辛格尔顿级{ 静态私有实例; 公共静态函数getInstance($args){ $page=$args['page']; 如果(!isset(self::$instance->$page)){ self::$instance->$page=newstatic(); 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']; } 返回self::$instance->$page; } 私有函数uu clone(){} 私有函数uu wakeup(){} 受保护函数_构造(){} } $page=\uuuuu名称空间\uuuuu; $instance[$page]=新对象(Singleton::getInstance(数组)( “页面”=>$page, “页面标题”=>“页面标题”, “菜单标题”=>“菜单标题”, “功能”=>“管理选项”, “内容图标”=>“dashicons dashicons编辑器kitchensink” ))); 添加操作('admin_init',数组($instance[$page],'admin_init'); 添加操作('admin_menu',数组($instance[$page],'admin_menu'); 注册激活钩子(uuu文件,数组($instance[$page],'activate');
admin\u菜单
似乎在
admin\u init
之前启动了,下面是发生的情况:

  • admin\u菜单
    wp admin/includes/menu.php上激发
  • 它包含在上的
    wp admin/menu.php
    末尾
  • 它包含在上的
    wp admin/admin.php
  • 之后,
    admin\u init

那么为什么不输出呢?WP codex中的引用:[admin_init]不能放在admin_init action函数中,因为admin_init action是在admin_菜单之后调用的。
/*
  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'));