Vamos a ver un ejemplo sencillo de como crear menus en el panel de administracion de WordPress o como crear vuestros menus de administracion.
Crear un menu en WordPress es bastante sencillo lo complicado es saber que poner en el y el fin.
Existen varias formas de hacerlo, lo puedes poner en un plugin, lo puedes poner en un tema, y luego lo puedes hacer con clases o con funciones sueltas. Dependera de la situacion en la que estes, por sencillez lo vamos a ver con funciones sueltas y os dejare una clase basica tambien.
Para que vale tener un menu de administracion en WordPress
Si quereis poder personalizar o tener vuestras propias paginas de configuracion para vuestro plugin o vuestro tema esta es la mejor solucion. Si lo que quereis es hacer un tema personalizado con muchos campos siempres podeis ayudaros de algun framework como option tree o option framework theme. En mi caso me gusta mas option tree de Valentin me permite crear listas automaticamente.
Crear un Menu en WordPress
Para esto usaremos la funcion add_menu_page() que nos provee la api de WordPress
add_menu_page ( string $page_title, // titulo de la pagina a mostrar
string $menu_title, // titulo del menu
string $capability, // permisos
string $menu_slug, // url unica
callable $function = '', // funcion que contiene el codigo que queremos pintar
string $icon_url = '', // icono que queramos poner ver dashicons
int $position = null // posicion en la lista
)
Crear un subMenu en WordPress
En este caso para crear una subopcion de tu menu utilizaremos la funcion add_submenu_page().
add_submenu_page ( string $parent_slug, // nombre opcion padre
string $page_title, // titulo se vera en la pagina
string $menu_title, // opcion menu
string $capability, // tipo permisos administrator, editor,..
string $menu_slug, // ruta que tendra
callable $function = '' // funcion que pinta la informacion a mostrar
)
Ejemplo en codigo de ambas opciones para que veais las diferencias
add_menu_page(
__( 'Simple', 'simple-wp' ),
__( 'Simple', 'simple-wp' ),
'administrator',
'simplewp',
'simple_dashboard'
);
// subpagina
add_submenu_page( 'simplewp',
__( 'Ingresos', 'simple-wp' ),
__( 'Ingresos', 'simple-wp' ),
'administrator', 'simplewp-ingresos',
'simple_ingresos'
);
Puesto que “Ingresos” es una subpagina de “Simple” lo primero que ponemos es el nombre de la opcion principal. Lo siguiente son el nombre pagina y el nombre de la opcion, seguido por los permisos , ruta y por ultimo la llamada a la funcion de callback que es la que nos va a pintar la informacion.
La ruta sera algo asi url http://dev.dcg.com/wp-admin/admin.php?page=simplewp-ingresos como veis tenemos $menu-slug como simplewp

Esta seria la funcion de callback simple_ingresos() que pintar la informacion de la foto anterior
<?php
function simple_ingresos() {
?>
<div class="wrap">
<h2><?php _e( 'Listado de Ingresos', 'simple-wp' ); ?></h2>
<p> Esto es un ejemplo de pagina del panel de administración de WordPress </p>
</div>
<?php
}
Aqui os dejo la referencia oficial de la parte de menus en Españo de la web de WordPress.org
Como veis crear opciones de menu y pantallas es realmente sencillo.
Ejemplo de codigo si lo hicieramos en una clase yo tengo un fichero que se llama simple.php y que hago un require_once en mi plugin
<?php
class Simple_WP_Admin_Menu {
public function __construct() {
add_action( 'admin_menu', array( $this, 'register_menus' ) );
}
public function register_menus() {
add_menu_page( __( 'Simple', 'simple-wp' ), __( 'Simple', 'simple-wp' ), 'administrator', 'simplewp', 'simple_dashboard');
add_submenu_page( 'simplewp', __( 'Ingresos', 'simple-wp' ), __( 'Ingresos', 'simple-wp' ), 'administrator', 'simplewp-ingresos', 'simple_ingresos' );
}
}
$simplewp_menu = new Simple_WP_Admin_Menu;
Ejemplo de una funcion del plugin donde hago los includes, como es una pantalla backend vereis que solo la llama si es administracion.
private function includes() {
require_once SIMPLEWP_PLUGIN_DIR . 'includes/class-db.php';
require_once SIMPLEWP_PLUGIN_DIR . 'includes/class-orders-db.php';
requere_once SIMPLEWP_PLUGIN_DIR . 'includes/class-ingresos-db.php';
require_once SIMPLEWP_PLUGIN_DIR . 'includes/class-capabilities.php';
if( is_admin() ) {
require_once SIMPLEWP_PLUGIN_DIR . 'includes/admin/class-menu.php';
require_once SIMPLEWP_PLUGIN_DIR . 'includes/admin/dashboard/dashboard.php';
require_once SIMPLEWP_PLUGIN_DIR . 'includes/admin/orders/orders.php';
require_once SIMPLEWP_PLUGIN_DIR . 'includes/admin/ingresos/ingresos.php';
}
require_once SIMPLEWP_PLUGIN_DIR . 'includes/class-templates.php';
require_once SIMPLEWP_PLUGIN_DIR . 'includes/install.php';
}