Eliminare una voce dai menu di WordPress è un'operazione distruttiva. Infatti la voce eliminata viene completamente rimossa e non è più associata al menu in questione. In realtà esiste una soluzione più intelligente che consiste nel rimuovere dall'output HTML la voce scelta senza eliminarla.
Possiamo utilizzare il seguente codice:
function excludeMenuItems( $items, $menu, $args ) {
foreach ( $items as $key => $item ) {
$id = get_post_meta( $item->ID, '_menu_item_object_id', true );
if($id == 134) {
unset($items[$key]);
}
}
return $items;
}
add_filter( 'wp_get_nav_menu_items', 'excludeMenuItems', null, 3 );
L'hook usato ha lo scopo di intercettare la generazione della marcatura del menu prima che questa abbia luogo. In questo stadio le voci del menu non sono altro che oggetti i quali possiedono delle proprietà a noi utili. Nel codice d'esempio abbiamo estratto l'ID di una voce (pagina, post o altro) e abbiamo effettuato un semplice test. In caso di risultato positivo, l'oggetto corrispondente alla voce del menu viene eliminato dall'array. Di conseguenza il menu verrà mostrato senza quella particolare voce.