Por lo que he leído en Internet, admin_init se dispara antes que admin_menu, ¿es esto cierto?
Hice una plantilla de complemento para probar esto y descubrí que no es el caso.
El código de prueba está debajo. El resultado que obtengo al activar el plugin es…
2
pt\singelton Object
(
[page] => pt
[page_title] => Page Title
[menu_title] => Menu Title
[capability] => manage_options
)
Observe el número 2 en la salida de arriba, es salida de la función admin_menu().
/*
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'));
admin_menu
parece disparar antes de admin_init
esto es lo que sucede:
-
Entonces, ¿por qué la salida no es
–Daniel Huckson
25 de noviembre de 2014 a las 22:54
-
Aquí está la referencia en el WP-codex: [admin_init] no debe colocarse en una función de acción admin_init, porque la acción admin_init se llama después de admin_menu. codex.wordpress.org/Plugin_API/Action_Reference/admin_menu
– fogx
25 de junio de 2018 a las 17:54
-
también, el siguiente código,
add_action('admin_init', function(){ echo 'admin_init->'; }); add_action('admin_menu', function(){ echo 'admin_menu->'; });
resulta enadmin_menu->admin_init->
.– Artem
30 de marzo a las 2:37
-
ahora te encuentras
admin_init
enganchar enwp-admin/admin.php
[on line 175] core.trac.wordpress.org/browser/tags/6.0/src/wp-admin/…–Ibnul Hasan
27 de mayo a las 4:11