WordPress: Menús para mini intranet

Para la nueva colaboración con la Asociación Española Contra la Pediculosis me hizo falta hacer una mini intranet con páginas privadas.
Pero WordPress no me permite dos cosas, añadir al menú páginas privadas y si estás logeado que cambie el menú.
Para arreglarlo modificamos el functions.php de nuestro childtheme.

Páginas privadas en el Menú.

Necesitamos añadir el siguiente código. Tu ya le cambias el nombre a la función según tu necesidad.

/* Las páginas privadas no puedes seleccionarlas en el configurador de Menús. Con este código si deja. */
add_filter( 'nav_menu_meta_box_object', 'mmtw_ver_paginas_privadas' );
/**
*Agregar query de consulta para seleccionar páginas para agregar a un menú
*/
function mmtw_ver_paginas_privadas( $args ){
if( $args->name == 'page' ) {
$args->_default_query['post_status'] = array('publish','private');
}
return $args;
}

Cambiar el menú para la mini intranet.

Vamos con el segundo problema. WordPress tampoco te deja elegir los menús que pueden aparecer dependiendo de si estás logeado o no.
En mi caso tan solo necesitaba crear una página como pequeña intranet para colgar algunos recursos para los asociados.
En mi caso tengo dos menús uno llamado principal que es el que ven todos los que visitan la web y otro llamado menu-intranet que es igual que el anterior pero que cuando haces login añade una opción más, Zona Socios.


/*Auto selección de menú según esté el usuario logeado o no. Para una pequeña intranet. Muestra páginas privadas en el menú */
function mmtw_wp_nav_menu_args( $args = '' ) {
if( is_user_logged_in() ) {
$args['menu'] = 'menu-intranet';
} else {
$args['menu'] = 'Principal';
}
return $args;
}
add_filter( 'wp_nav_menu_args', 'mmtw_wp_nav_menu_args' );

mmtw menú Asociación Española Contra la Pediculosis

mmtw menú mini intranet

Con esto he solucionado esos dos problemas.

No te lo pienses

Hablamos y vemos que podemos hacer. Estoy seguro que conseguiremos hacer algo grande.